什么是CoreText相当于AppKit的NSObliquenessAttributeName?

时间:2012-02-28 17:26:00

标签: ios cocoa drawing core-text italic

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

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

尚未尝试过,但根据iOS Programming Pushing The Limits,将kCTFontItalicTrait传递给CTFontCreateCopyWithSymbolicTraits会选择真正的斜体(如果可用),否则会倾斜。对于手动十进制倾斜,也有kCTFontSlantTrait,最高可达30度。

答案 2 :(得分:1)

显示没有斜体特征的字体作为斜体通常是一个坏主意。但是,我可以理解,在某些情况下,无论如何都必须执行此操作。

我现在想到的唯一解决方案是使用剪切字体矩阵创建自定义字体:

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

您必须使用矩阵,看看哪种效果最佳。 (请注意,这不是我头脑和互联网上的假代码混合。)