2012-02-28 52 views
4

我正在使用CoreText在Mac/iOS跨平台代码中绘制一些文本。我可能使用的操作系统中没有为所有用户安装真正的“斜体”版本的字体,但他们需要知道文本是斜体。什么是CoreText等同于AppKit的NSObliquenessAttributeName?

使用AppKit的NSAttributedString -drawAtPoint :,我可以使用NSObliquenessAttributeName使文本倾斜(并因此看起来斜体 - 好,斜)。 CoreText似乎没有这个属性的等价物。至少我在CTStringAttributes.h中找不到任何文档(不是在CoreText发布几年后还没有任何文档)。

有谁知道如何在iOS上使用CoreText获得斜文本?

+0

Core Text的文档?你是这个意思? https://developer.apple.com/library/ios/documentation/Carbon/Reference/CoreText_Framework_Ref/ – 2012-02-28 17:34:44

+0

我在Mac开发中心点击了“Reference”,在搜索框中输入了CoreText,我得到的只有三个示例应用程序。你如何取出这些秘密文件? – uliwitness 2012-02-28 18:09:57

+0

这是https://developer.apple.com/library/mac/search/?q=core+text上的顶级参考资料。 – 2012-02-28 18:29:11

回答

1

显示斜体字体没有斜体字体通常是一个坏主意。但是,我可以理解,有些情况下必须强制执行。

,自己目前在我脑海中唯一的解决方案是创建一个剪切字体矩阵自定义字体:

CGAffineTransform matrix = CGAffineTransformMake(1, tan(degreesToRadians(0)), tan(degreesToRadians(20)), 1, 0, 0); 
CTFontRef myfont = CTFontCreateWithName(CFSTR("Helvetica"), 48, &matrix); 

你必须与矩阵玩,看看带来最好的结果。 (请不认为这是一个假的代码混合了我的头和网络连接。)

+1

我想你想要一个剪切矩阵而不是旋转矩阵。 – alastair 2012-02-28 17:54:35

+1

谢谢,我会尝试,与阿拉斯泰尔的纠正。我很高兴不必显示人造斜体,但它是用来做这件事的预先存在的数据,而且我不能只放弃以前用于显示正确的信息。 :-) – uliwitness 2012-02-28 18:03:48

+1

是的,倾斜矩阵就是你想要的。 – 2012-02-28 18:11:11

1

没有试过,但根据iOS Programming Pushing The Limits,路过kCTFontItalicTraitCTFontCreateCopyWithSymbolicTraits会选择真正的斜体(如果可用)和倾斜,否则。还有kCTFontSlantTrait手动小数倾斜角度可达30度。

+0

据我所知,这只适用于实际上以斜体变体为特征的字体。我理解这个问题,就好像OP想用不带斜体的字体显示斜体一样。 – 2012-02-28 17:42:05

+0

我试过kCTFontSlantTrait,这没有帮助(我感觉这是一个只读属性)。在Courier这样的情况下,斜体字体采用倾斜的字体,实际上它带有一个预先构建的斜向变体,但我需要显示的一些字体甚至没有。 – uliwitness 2012-02-28 17:51:48

8

我会尝试使用仿射变换参数CTFontCreateWithName(),剪切矩阵。例如

CGAffineTransform matrix = { 1, 0, 0.5, 1, 0, 0 }; 
CTFontRef myFont = CTFontCreateWithName(CFSTR("Helvetica"), 48, &matrix); 

这会产生一个相当大的偏差(假设我的判断正确),但你明白了。

更新:

事实上,the documentation appears to imply that this is the right way to do things

+0

很好的答案,但请不要让我必须看这个。 – hooleyhoop 2012-02-28 20:05:36

相关问题