をCALayer
追加CATextLayer
して作成しましたが、テキストがぼやけて表示されます。ドキュメントでは、「サブピクセルアンチエイリアス」について話していますが、それは私にはあまり意味がありません。誰もCATextLayer
が明確なテキストで作るコードスニペットを持っていますか?
Appleのドキュメントのテキストは次のとおりです。
注:CATextLayerは、テキストのレンダリング時にサブピクセルアンチエイリアスを無効にします。テキストは、それがラスタライズされると同時に既存の不透明な背景に合成される場合にのみ、サブピクセルアンチエイリアスを使用して描画できます。テキストピクセルを織り込む背景ピクセルを用意する前に、サブピクセルアンチエイリアスが適用されたテキストを画像またはレイヤーに個別に描画する方法はありません。レイヤーの不透明度プロパティをYESに設定しても、レンダリングモードは変更されません。
2番目の文はcomposites
、existing opaque background at the same time that it's rasterized.
それを「素晴らしい」テキストにすると見栄えの良いテキストが得られることを意味しますが、どのように合成し、どのように不透明な背景にして、どのようにラスタライズしますか?
彼らがキオスクメニューの例で使用するコードは次のとおりです(iOSではなくOS Xですが、動作すると思います!)
NSInteger i;
for (i=0;i<[names count];i++) {
CATextLayer *menuItemLayer=[CATextLayer layer];
menuItemLayer.string=[self.names objectAtIndex:i];
menuItemLayer.font=@"Lucida-Grande";
menuItemLayer.fontSize=fontSize;
menuItemLayer.foregroundColor=whiteColor;
[menuItemLayer addConstraint:[CAConstraint
constraintWithAttribute:kCAConstraintMaxY
relativeTo:@"superlayer"
attribute:kCAConstraintMaxY
offset:-(i*height+spacing+initialOffset)]];
[menuItemLayer addConstraint:[CAConstraint
constraintWithAttribute:kCAConstraintMidX
relativeTo:@"superlayer"
attribute:kCAConstraintMidX]];
[self.menuLayer addSublayer:menuItemLayer];
} // end of for loop
ありがとう!
編集:実際に使用したコードを追加すると、テキストがぼやけます。それは私が追加について投稿関連する質問からだUILabel
のではなくをCATextLayer
代わりにブラックボックスを取得します。 http://stackoverflow.com/questions/3818676/adding-a-uilabels-layer-to-a-calayer-and-it-just-shows-black-box
CATextLayer* upperOperator = [[CATextLayer alloc] init];
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGFloat components1[4] = {1.0, 1.0, 1.0, 1.0};
CGColorRef almostWhite = CGColorCreate(space,components1);
CGFloat components2[4] = {0.0, 0.0, 0.0, 1.0};
CGColorRef almostBlack = CGColorCreate(space,components2);
CGColorSpaceRelease(space);
upperOperator.string = [NSString stringWithFormat:@"13"];
upperOperator.bounds = CGRectMake(0, 0, 100, 50);
upperOperator.foregroundColor = almostBlack;
upperOperator.backgroundColor = almostWhite;
upperOperator.position = CGPointMake(50.0, 25.0);
upperOperator.font = @"Helvetica-Bold";
upperOperator.fontSize = 48.0f;
upperOperator.borderColor = [UIColor redColor].CGColor;
upperOperator.borderWidth = 1;
upperOperator.alignmentMode = kCAAlignmentCenter;
[card addSublayer:upperOperator];
[upperOperator release];
CGColorRelease(almostWhite);
CGColorRelease(almostBlack);
編集2:これがどのように解決されたかについては、以下の私の答えを参照してください。sbg。