Według the documentation, możliwe jest, aby włączyć wygładzanie czcionek wewnątrz CATextLayer:Jak uzyskać tekst CATextLayer?
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.
Oto jak rozumiem to zdanie:
@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;
który nie działa. Tekst nie jest rysowany za pomocą wygładzania podpikselami subpikseli.
próbowałeś ustawienie warstwie tekstowej koloru tła? '[blackText setBackgroundColor: [NSColor whiteColor].CGColor] ' –
@robmayoff Przyznaję, że zapomniałem spróbować ustawić kolor tła na whiteColor, ale to nie działa, tzn. Nie ma subpiksela aa. – alecail
Sam w tej chwili pracuję nad tym. Co najmniej jeden problem z powyższym kodem polega na tym, że mówisz o warstwie blackText do rasteryzacji, co nie pomoże. Musisz wskazać superwarstwę, aby rasteryzować jej warstwy podrzędne w momencie renderowania (ustawiając na niej "setShouldRasterize:".) Moje czytanie tego fragmentu dokumentacji sugeruje, że jeśli to zrobisz (na superwarstwie) -CATextLayer zostanie poddany rasteryzacji do superwarstwy z antyliasingiem. Testuję później, chyba że znajdę inne podejście. – Benjohn