Saya telah membuat CALayer
dengan menambahkan CATextLayer
dan teks menjadi buram. Dalam dokumen, mereka berbicara tentang "sub-pixel antialiasing", tapi itu tidak berarti banyak bagi saya. Adakah yang punya potongan kode yang membuat CATextLayer
dengan sedikit teks yang jelas?
Berikut teks dari dokumentasi Apple:
Catatan: CATextLayer menonaktifkan antialiasing sub-piksel saat merender teks. Teks hanya dapat digambar menggunakan antialiasing sub-piksel jika digabungkan menjadi latar belakang buram yang ada pada saat yang sama dengan rasterisasi. Tidak ada cara untuk menggambar teks subpiksel-antialiased dengan sendirinya, baik menjadi gambar atau lapisan, secara terpisah sebelum memiliki piksel latar belakang untuk menenun piksel teks. Mengatur properti opacity dari layer menjadi YES tidak mengubah mode rendering.
Kalimat kedua menyiratkan bahwa seseorang bisa mendapatkan teks yang terlihat bagus jika composites
membuatnya menjadi existing opaque background at the same time that it's rasterized.
Itu bagus, tapi bagaimana cara menggabungkannya dan bagaimana Anda memberinya latar belakang buram dan bagaimana Anda merasternya?
Kode yang mereka gunakan dalam contoh Menu Kios adalah sebagai berikut: (Ini OS X, bukan iOS, tapi saya anggap itu berfungsi!)
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
Terima kasih!
EDIT: Menambahkan kode yang sebenarnya saya gunakan yang menghasilkan teks buram. Ini dari pertanyaan terkait yang saya posting tentang menambahkan UILabel
daripada CATextLayer
tetapi mendapatkan kotak hitam. 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);
EDIT 2: Lihat jawaban saya di bawah untuk bagaimana ini diselesaikan. sbg.