9

CATextLayerを作成し、そのstringプロパティを に設定する簡単なサンプル アプリがありますNSAttributedString。次に、その CATextLayer をビューに追加します。

#import <CoreText/CoreText.h>
#import <QuartzCore/QuartzCore.h>

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    CTFontRef fontFace = CTFontCreateWithName((__bridge CFStringRef)(@"HelfaSemiBold"), 24.0, NULL);
    NSMutableDictionary *attributes = [[NSMutableDictionary alloc] init];
    [attributes setObject:(__bridge id)fontFace forKey:(NSString*)kCTFontAttributeName];
    [attributes setObject:[UIColor blueColor] forKey:(NSString*)kCTForegroundColorAttributeName];
    NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:@"Lorem Ipsum" attributes:attributes];

    CATextLayer *textLayer = [CATextLayer layer];
    textLayer.backgroundColor = [UIColor whiteColor].CGColor;
    textLayer.frame = CGRectMake(20, 20, 200, 100);
    textLayer.contentsScale = [[UIScreen mainScreen] scale];
    textLayer.string = attrStr;

    [self.view.layer addSublayer:textLayer];
}

テキストが青ではなく黒であることを除いて、これはシミュレーターでうまく機能します。デバイスで実行すると、シミュレーターと同じようにすべてが表示されますが、コンソールで次の 2 つのエラーが生成されます。

<Error>: CGContextSetFillColorWithColor: invalid context 0x0
<Error>: CGContextSetStrokeColorWithColor: invalid context 0x0

CGContext をどこかに設定する必要がありますか? 属性の設定が間違っていますか? 私は完全に間違った方向に進んでいますか?これは iOS 5.x アプリ用でありCATextLayer、パフォーマンス上の理由から を使用したいことに注意してください。実際のアプリには多く CATextLayerの があります。

4

2 に答える 2

12

forCGColorの代わりに使用する必要があります。UIColorkCTForegroundColorAttributeName

[attributes setObject:(__bridge id)[UIColor blueColor].CGColor
               forKey:(NSString *)kCTForegroundColorAttributeName];
于 2013-04-17T06:38:51.593 に答える