Bir yaptık CALayer
eklenen bir ile CATextLayer
ve metin bulanık çıkar. Dokümanlarda "alt piksel yumuşatma" dan bahsediyorlar ama bu benim için pek bir şey ifade etmiyor. CATextLayer
Net olan bir metinle bir kod parçacığı yapan var mı?
Apple'ın belgelerinden metin şu şekildedir:
Not: CATextLayer, metni işlerken alt piksel yumuşatmayı devre dışı bırakır. Metin, yalnızca rasterleştirilmesiyle aynı zamanda mevcut opak bir arka planda birleştirildiğinde alt piksel yumuşatma kullanılarak çizilebilir. Metin piksellerini örmek için arka plan piksellerine sahip olmadan önce, bir görüntü veya bir katman içine, alt piksel-anti-yalınlaştırılmış metni kendi başına ayrı ayrı çizmenin bir yolu yoktur. Katmanın opaklık özelliğinin EVET olarak ayarlanması, oluşturma modunu değiştirmez.
İkinci cümle, birinin güzel görünen bir metni composites
bir existing opaque background at the same time that it's rasterized.
Bu harika haline getirebileceğini ima eder , ancak onu nasıl birleştiririm ve ona opak bir arka plan verir ve onu nasıl rasterleştirirsiniz?
Kiosk Menüsü örneğinde kullandıkları kod şu şekildedir: (OS X, iOS değil, ancak çalıştığını varsayıyorum!)
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
Teşekkürler!
DÜZENLEME: Aslında kullandığım kodu eklemek bulanık metinle sonuçlandı. Bu, a UILabel
yerine CATextLayer
bir kara kutu eklemekle ilgili yayınladığım ilgili bir sorudan . 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);
DÜZENLEME 2: Bunun nasıl çözüldüğünü öğrenmek için aşağıdaki cevabıma bakın. sbg.