我有一个自定义视图,其中我尝试使用Windows字体(calibri.ttf)绘制文本。不过,我在使用功能之间获得不同的行为。使用ShowText时自定义字体无法正确呈现
我有嵌入字体作为应用程序的一部分(将其添加到UIAppFonts列表&设置它的建设行动内容),当我使用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));
}
结果
不过,如果我尝试使用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");
}
结果
UPDATE - 这是我所得到的,如果我使用MacRoman
编码,而不是FontSpecific
:
我也尝试过在手动加载字体和使用该字体,但然后我什么也没有收到,就像它不能识别字体例如
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
。欢迎替代解决方案!
你有没有找到这个解决方案? –
@JC Fraid not(因此为什么问题仍然是开放的)。我认为这个问题实际上是Calibri字体和iOS之间的兼容性,但是,还没有得到证实。我最终恢复为使用类似的预建字体(Verdana)。 – James
我发现了一个类似Calibri的字体CartoGothicStd。我不得不从OTF转换为TTF,但它的工作原理。 –