У меня есть пользовательский вид, в котором я пытаюсь нарисовать текст с использованием шрифта Windows (calibri.ttf). Однако при использовании функций DrawString
& ShowText
я получаю другое поведение.
Я встроил шрифт как часть приложения (добавил его в список UIAppFonts и установил для его действия сборки значение Content ), и все работает нормально, когда я использую DrawString
метод из моего пользовательского UIView например
Код
public override void Draw (System.Drawing.RectangleF rect)
{
base.Draw (rect);
DrawString("Calibri font via DrawString", new RectangleF(10, 10, 100, 100), UIFont.FromName("Calibri", 16f));
}
Результат
![Using Calibri font with DrawString](https://i.stack.imgur.com/5HCOu.png)
Однако, если я попытаюсь нарисовать тот же текст на этот раз, используя ShowText
, это будет выглядеть так, как будто шрифт неправильно кодирует текст, или отображение символов неправильное.
Код
public override void Draw (System.Drawing.RectangleF rect)
{
base.Draw (rect);
var ctx = UIGraphics.GetCurrentContext();
ctx.SelectFont("Calibri", 16f, MonoTouch.CoreGraphics.CGTextEncoding.FontSpecific);
ctx.ShowTextAtPoint(10, 10, "Calibri font via ShowText using SelectFont");
}
Результат
![Result using FontSpecific encoding and ShowTextAtPoint](https://i.stack.imgur.com/HUzRS.png)
ОБНОВЛЕНИЕ - Вот что я получу, если вместо FontSpecific
использовать кодировку MacRoman
:
![Result using MacRoman encoding and ShowTextAtPoint](https://i.stack.imgur.com/IbeYW.png)
Я также пытался загрузить шрифт вручную и использовать его, но затем я ничего не получаю, как будто он не распознает шрифт, например.
var fontPath = NSBundle.MainBundle.PathForResource("calibri", "ttf");
var provider = new CGDataProvider(fontPath);
var font = CGFont.CreateFromProvider(provider);
var ctx = UIGraphics.GetCurrentContext();
ctx.SetFont(font);
ctx.ShowTextAtPoint(10, 20, "Calibri font via ShowText using SetFont");
Я знаю, что DrawString
- это UIKit, а ShowText
- это CG (кварц), поэтому я понимаю, что могут быть различия. Однако из того, что я понял, единственное различие с DrawString заключалось в том, что он исправил проблему с разницей в смещении (CG находится внизу слева / UIKit вверху слева).
ПРИМЕЧАНИЕ. - Основная проблема, с которой я столкнулся, заключается в том, что мне нужно использовать этот шрифт для рисования текста на слое с помощью пользовательского CALayerDelegate. У меня нет доступа к функции DrawString
, поэтому единственный способ рисования текста - это ShowText
. Альтернативные решения приветствуются!