0

一些奇怪的事情正在发生。我正在使用 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);
}
4

1 回答 1

2

从某种意义上说,NSAttributedString支持任意属性。也就是说,您可以将任何您喜欢的属性键值对放入属性字典中,NSAttributedString并尽职尽责地为您存储。这包括你构成的属性。

但是,NSAttributedString不会使用它不理解的属性来格式化或布置字符串。它只理解 Cocoa 的预定义属性。

核心文本也是如此。它只了解某些属性。不幸的是,Core Text 理解的属性集与 Cocoa 理解的属性集并不相同NSAttributedString。Core Text 理解的集合记录在Core Text String Attributes Reference中。它不包括倾斜属性。

我不确定,但我认为您需要使用使用转换矩阵创建的字体来获得倾斜字形。(当然,除非您有理由不这样做,否则您应该更喜欢适当的斜体。)

于 2014-10-21T03:15:16.427 回答