有些奇怪的事情正在发生。我正在使用NSAttributedString进行一些格式化,包括斜面和倾斜。 NSObliquenessAttributeName完成了这个伎俩。但后来我想扩展到CoreText来控制文本实际渲染的帧。甚至在搞清楚之前,我注意到我的NSObliquenessAttributeName没有被渲染。我的所有其他属性仍然呈现,所以我有点困惑。
- (void)drawSlanted
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
[[UIColor blackColor] setFill];
NSAttributedString *text = [[NSAttributedString alloc] initWithString:@"This isn't slanted... but is stroked" attributes:@{NSObliquenessAttributeName: @10.0,
NSStrokeWidthAttributeName: @2.0}];
// Flip Coordinates
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0.0, CGRectGetHeight(self.bounds));
CGContextScaleCTM(context, 1.0, -1.0);
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)text);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, text.length), [UIBezierPath bezierPathWithRect:self.bounds].CGPath, NULL);
CTFrameDraw(frame, context);
CFRelease(frame);
CGContextRestoreGState(context);
}
答案 0 :(得分:1)
在某种意义上,NSAttributedString
支持任意属性。也就是说,您可以在属性字典中放置您喜欢的任何属性键值对,NSAttributedString
将尽职地为您存储它。这包括你组成的属性。
但是,NSAttributedString
将不会使用它不能理解的属性来格式化或布置字符串。它只了解Cocoa的预定义属性。
Core Text也是如此。它只了解某些属性。不幸的是,Core Text理解的属性集与Cocoa和NSAttributedString
理解的集合不同。核心文本理解的集合记录在Core Text String Attributes Reference中。它不包含倾斜属性。
我不确定,但我认为你需要使用用变换矩阵创建的字体来获得倾斜的字形。 (当然,除非你有理由不这样做,否则你应该更喜欢斜体。)