首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ShowText时,自定义字体不能正确呈现

使用ShowText时,自定义字体不能正确呈现
EN

Stack Overflow用户
提问于 2011-10-06 09:28:47
回答 1查看 973关注 0票数 3

我有一个自定义视图,在该视图中,我试图使用Windows字体(calibri.ttf)绘制文本。但是,在使用DrawStringShowText函数时,我得到了不同的行为。

我已经嵌入字体作为应用程序的一部分(将它添加到UIAppFonts列表中&将它的构建操作设置为内容),当我使用来自自定义UIView的DrawString方法时,我都工作得很好。

代码语言:javascript
复制
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绘制相同的文本,那么字体似乎没有正确地编码文本,或者字符映射是错误的。

代码语言:javascript
复制
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,我会得到这样的结果

我也尝试过手动加载字体,然后使用它,但是我什么也没有得到,就好像它不识别字体。

代码语言:javascript
复制
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 (Quartz),所以我知道可能会有不同。然而,根据我收集到的与DrawString的唯一不同之处是,它用偏移量的差异来纠正这个问题(CG位于左下角/UIKit位于左上角)。

注意-我的基本问题是,我需要使用这种字体来绘制文本到一个层通过自定义CALayerDelegate。我无法从那里访问DrawString函数,因此,我看到绘制文本的唯一方法是通过ShowText__。欢迎其他解决方案!

EN

回答 1

Stack Overflow用户

发布于 2011-10-10 21:53:59

这看起来确实是一个编码问题。尝试使用CGTextEncoding.MacRoman而不是CGTextEncoding.FontSpecific (甚至Arial也不会像预期的那样用FontSpecific呈现)。

更新10月12日

( a)您的最后一个代码示例无法工作,因为Apple,特别是,不会同时使用SetFontShowText。引用如下:

石英使用系统提供的字体数据,通过当前字体的编码向量映射数组的每个字节,以获得要显示的字形。注意,字体必须是使用CGContextSelectFont设置的。不要将CGContextShowText与CGContextSetFont结合使用。

( b) CGTextEncoding.MacRoman代码与其他iPhone提供的字体一起工作。我开始怀疑Calibri.ttf字体本身是iOS不支持的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7672453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档