0

何か奇妙なことが起こっています。傾斜や傾斜など、いくつかの書式設定のために NSAttributedString を使用していました。NSObliquenessAttributeName はトリックを行いました。しかし、その後、テキストが実際にレンダリングされるフレームを制御するために CoreText に拡張したいと考えました。他のすべての属性はまだレンダリングされているため、少し混乱しています。

- (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 に答える