Zrobiłem CALayer
z dodanym CATextLayer
i tekst jest rozmazany. W dokumentach mówią o "antyaliasingu subpikselowym", ale to niewiele dla mnie znaczy. Ktoś ma fragment kodu, który sprawia, że CATextLayer
z jasnym tekstem?Jak uzyskać tekst w tekście CATextLayer, aby było jasne
Oto tekst z dokumentacji Apple:
Uwaga: CATextLayer wyłącza subpiksel antyaliasing podczas renderowania tekstu. Tekst można narysować tylko za pomocą subumikselowego wygładzania krawędzi, gdy jest on wkomponowany w istniejące nieprzezroczyste tło w tym samym czasie, co , zrasteryzowany. Nie ma możliwości samodzielnego narysowania tekstu z podpowiedziami podrzędnymi, niezależnie od tego, czy jest to obraz, czy warstwa, oddzielnie przed z pikselami tła, na których tkane są piksele tekstowe. Ustawienie właściwości nieprzezroczystości warstwy na TAK nie zmienia trybu renderowania .
Drugie zdanie sugeruje, że można uzyskać dobre patrząc tekst jeśli jeden composites
go w existing opaque background at the same time that it's rasterized.
to świetnie, ale jak mam kompozyt jest i jak można dać nieprzezroczystego tła i jak można go rasteryzację?
Kod używają ich przykładzie kiosku Menu jest w następujący sposób: (to OS X, a nie na iOS, ale zakładam, że to działa!)
NSInteger i;
for (i=0;i<[names count];i++) {
CATextLayer *menuItemLayer=[CATextLayer layer];
menuItemLayer.string=[self.names objectAtIndex:i];
[email protected]"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
Dzięki!
EDYCJA: Dodanie kodu, którego faktycznie użyłem, spowodowało rozmycie tekstu. To z pokrewnego pytania, które napisałem o dodaniu UILabel
zamiast CATextLayer
, ale zamiast tego otrzymam czarne pudełko. 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: Zobacz moją odpowiedź poniżej dla mnie jak to rozwiązać. sbg.
To nie odpowie na to pytanie, ale może być istotne dla kogoś takiego jak ja, kto szuka tylko wyciągnąć nadana tekst, w sposób najbardziej podobny do używania UILabel: http://stackoverflow.com/questions/3786528/iphone-ipad-how-exactly-use-nsattributedstrin g – DenNukem