ฉันได้ทำการCALayer
เพิ่มCATextLayer
และข้อความออกมาพร่ามัว ในเอกสารพวกเขาพูดถึง "การลบรอยหยักแบบพิกเซลย่อย" แต่นั่นไม่ได้มีความหมายกับฉันมากนัก ใครมีข้อมูลโค้ดที่ทำให้CATextLayer
มีข้อความที่ชัดเจน
นี่คือข้อความจากเอกสารของ Apple:
หมายเหตุ: CATextLayer ปิดการใช้งานการลบรอยหยักพิกเซลย่อยเมื่อแสดงผลข้อความ สามารถวาดข้อความได้โดยใช้การลบรอยหยักแบบพิกเซลย่อยเท่านั้นเมื่อประกอบเข้ากับพื้นหลังทึบแสงที่มีอยู่ในเวลาเดียวกันกับที่มีการแรสเตอร์ ไม่มีวิธีใดที่จะวาดข้อความลบพิกเซลย่อยด้วยตัวเองไม่ว่าจะเป็นรูปภาพหรือเลเยอร์โดยแยกจากกันก่อนที่จะมีพิกเซลพื้นหลังเพื่อสานพิกเซลข้อความเข้าไป การตั้งค่าคุณสมบัติความทึบของเลเยอร์เป็นใช่จะไม่เปลี่ยนโหมดการแสดงผล
ประโยคที่สองบอกเป็นนัยว่าเราจะได้ข้อความที่ดูดีถ้าcomposites
เป็นข้อความexisting opaque background at the same time that it's rasterized.
ที่ดี แต่ฉันจะประกอบมันได้อย่างไรและคุณจะให้พื้นหลังทึบแสงได้อย่างไรและคุณจะแรสเตอร์ได้อย่างไร
รหัสที่พวกเขาใช้ในตัวอย่างของเมนูคีออสก์มีดังนี้: (เป็น OS X ไม่ใช่ iOS แต่ฉันคิดว่ามันใช้งานได้!)
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.