Я зробив a 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);
EDIT 2: Дивіться мою відповідь нижче про те, як це вирішено. sbg.