Theo the documentation, nó có thể kích hoạt tính năng làm mịn phông chữ bên CATextLayer:Làm thế nào để CATextLayer trơn tru văn bản của nó?
Text can only be drawn using sub-pixel antialiasing when it is composited into an existing opaque background at the same time that it's rasterized.
Sau đây là cách tôi hiểu câu này:
@implementation CATextLayerWithFontSmoothing
-(id)init {
self=[super init];
if (self) {
CALayer * whiteBackground = [CALayer layer];
CATextLayer * blackText = [CATextLayer layer];
[whiteBackground setBounds:NSMakeRect(0, 0, 300, 300)];
[blackText setBounds:NSMakeRect(0, 0, 300, 300)];
[whiteBackground setBackgroundColor:[NSColor whiteColor].CGColor];
[blackText setForegroundColor:[NSColor blackColor].CGColor];
[blackText setString:@"CATextLayer"];
[blackText setShouldRasterize:YES];
[self addSublayer:whiteBackground];
[self addSublayer: blackText];
}
return self;
mà không hoạt động. Văn bản không được vẽ bằng cách sử dụng tính năng chống răng cưa subpixel.
Bạn đã cố gắng thiết lập màu nền lớp văn bản không? '[blackText setBackgroundColor: [NSColor whiteColor].CGColor] ' –
@robmayoff Tôi thừa nhận tôi đã quên thử thiết lập màu nền thành whiteColor, nhưng nó không hoạt động, tức là nó không phải là subpixel aa. – alecail
Tôi đang làm việc thông qua điều này bản thân mình vào lúc này. Ít nhất một vấn đề với đoạn mã ở trên là bạn đang yêu cầu lớp blackText tự động rasterise, điều này sẽ không giúp ích gì. Bạn cần phải nói cho một lớp siêu để rasterise các lớp con của nó vào nó khi nó render (bằng cách thiết lập 'setShouldRasterize:' trên đó. Tôi đọc của rằng bit của tài liệu cho thấy rằng nếu bạn làm điều này (trên lớp siêu) phụ -CATextLayer sẽ được rasterised vào lớp siêu với chống alising.Tôi sẽ được thử nghiệm sau này, trừ khi tôi tìm thấy một cách tiếp cận khác. – Benjohn