Tôi đã thực hiện một CALayer
với một được thêm vào CATextLayer
và văn bản bị mờ. Trong tài liệu, họ nói về "khử răng cưa điểm ảnh phụ", nhưng điều đó không có nhiều ý nghĩa với tôi. Có ai có đoạn mã tạo ra một đoạn CATextLayer
văn bản rõ ràng không?
Đây là nội dung từ tài liệu của Apple:
Lưu ý: CATextLayer vô hiệu hóa khử răng cưa pixel phụ khi hiển thị văn bản. Văn bản chỉ có thể được vẽ bằng cách sử dụng khử răng cưa pixel phụ khi nó được kết hợp vào một nền mờ hiện có cùng thời điểm nó được tạo ra. Không có cách nào để tự vẽ văn bản subpixel-antialiased, cho dù vào một hình ảnh hay một lớp, trước khi có các pixel nền để đan các pixel văn bản vào. Đặt thuộc tính độ mờ đục của lớp thành CÓ không thay đổi chế độ hiển thị.
Câu thứ hai ngụ ý rằng người ta có thể có được văn bản đẹp nếu một văn bản composites
đó thành Một cái existing opaque background at the same time that it's rasterized.
đó thật tuyệt, nhưng làm cách nào để kết hợp nó và làm thế nào để bạn tạo cho nó một nền mờ và làm thế nào để bạn phân loại nó?
Mã họ sử dụng trong ví dụ về Menu Kiosk như sau: (Đó là OS X, không phải iOS, nhưng tôi cho rằng nó hoạt động!)
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
Cảm ơn!
CHỈNH SỬA: Thêm mã mà tôi thực sự đã sử dụng dẫn đến văn bản bị mờ. Đó là từ một câu hỏi liên quan mà tôi đã đăng về việc thêm một UILabel
chứ không phải một CATextLayer
nhưng thay vào đó nhận được một hộp đen. 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);
CHỈNH SỬA 2: Xem câu trả lời của tôi bên dưới để biết cách giải quyết vấn đề này. sbg.