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
の があります。