4

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

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

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

4

3 回答 3

8

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

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

这将产生相当大的偏差(假设我做对了),但你明白了。

更新:

事实上,文档似乎暗示这是做事的正确方法

于 2012-02-28T17:54:18.490 回答
1

Displaying a font that has no italic trait as italic is generally a bad idea. However, I can understand that there are some cases where this has to be enforced anyways.

The only solution that comes to my mind right now is to create a custom font with a sheared font matrix:

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

You'll have to play with the matrix and see what brings the best results. (Please not that this is a fake code mix out of my head and the internet.)

于 2012-02-28T17:45:50.720 回答
1

没有尝试过,但根据iOS Programming Pushing The Limits ,如果可用,传递kCTFontItalicTraittoCTFontCreateCopyWithSymbolicTraits将选择真斜体,否则选择斜体。还有kCTFontSlantTrait高达 30 度的手动小数倾斜。

于 2012-02-28T17:35:50.453 回答