Ich habe ein seltsames Problem mit CALayer Zeichnung für das iPhone. Ich habe eine Root-Ebene, die eine Reihe von Sublayern hinzufügt, die "Bubbles" darstellen. Das Endergebnis soll so etwas wie folgt aussehen:CALayer und CGGradientRef Anti-Aliasing?
http://www.expensivedna.com/IMG_0018.PNG http://www.expensivedna.com/IMG_0018.PNG
Das Problem ist, dass ich nicht die Schicht Anti-Aliasing zu bekommen scheinen (beachten Sie die jaggies auf die Blasen). Mein Code drawInContext für die Blasen CALayer Überschreiben ist wie folgt:
- (void)drawInContext:(CGContextRef)theContext{
CGContextSetAllowsAntialiasing(theContext, true);
CGContextSetShouldAntialias(theContext, true);
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 };
CGFloat components[8] = { 1.0, 1.0, 1.0, 0.5, // Start color
1.0, 1.0, 1.0, 0.0 }; // End color
CGColorSpaceRef rgbColorspace = CGColorSpaceCreateDeviceRGB();
CGGradientRef glossGradient =
CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations);
CGPoint topCenter = CGPointMake(25, 20);
CGPoint midCenter = CGPointMake(25, 25);
CGContextDrawRadialGradient(theContext, glossGradient, midCenter, 20, topCenter, 10, kCGGradientDrawsAfterEndLocation);
}
Nun ist die wirklich Seltsame ist, dass, wenn ich etwas den Zeichencode ändern, um nur normale rote Kreise ziehen wie folgt:
- (void)drawInContext:(CGContextRef)theContext{
CGContextSetAllowsAntialiasing(theContext, true);
CGContextSetShouldAntialias(theContext, true);
CGContextSetFillColorWithColor(theContext, [UIColor redColor].CGColor);
CGContextFillEllipseInRect(theContext, CGRectMake(0, 0, 40,40));
}
Alles scheint zu Anti-Aliasing-OK:
http://www.expensivedna.com/IMG_0017.PNG http://www.expensivedna.com/IMG_0017.PNG
Ich kann dieses anscheinend merkwürdige Verhalten nicht herausfinden. Fehle mir ein Unterschied zwischen Antialiasing-Gradienten und normalen Kreisen?
Danke Jungs.
Tipp: Hat meinen rect durch einen 1 Punkt Einsatz jaggies hier vollständig zu eliminieren. – mattorb