J'ai un problème étrange avec CALayer dessin pour l'iPhone. J'ai une couche racine qui ajoute un groupe de sous-couches représentant des "bulles". Le résultat final est censé ressembler à ceci:CALayer et l'anticrénelage CGGradientRef?
http://www.expensivedna.com/IMG_0018.PNG http://www.expensivedna.com/IMG_0018.PNG
Le problème est que je ne peux pas sembler obtenir la couche d'anti-alias (notez les crénelage sur les bulles). Mon code d'écraser drawInContext pour la CALayer bulle est la suivante:
- (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);
}
Maintenant, la chose vraiment étrange est que si je modifie un peu le code de dessin pour dessiner uniquement les cercles rouges normaux comme suit:
- (void)drawInContext:(CGContextRef)theContext{
CGContextSetAllowsAntialiasing(theContext, true);
CGContextSetShouldAntialias(theContext, true);
CGContextSetFillColorWithColor(theContext, [UIColor redColor].CGColor);
CGContextFillEllipseInRect(theContext, CGRectMake(0, 0, 40,40));
}
Tout semble anticrénelage OK:
http://www.expensivedna.com/IMG_0017.PNG http://www.expensivedna.com/IMG_0017.PNG
Je n'arrive pas à comprendre ce comportement apparemment étrange. Est-ce qu'il me manque une différence entre les gradients anti-crénelage et les cercles normaux?
Merci les gars.
conseil: Nous avons dû encadré mon rect par un 1 point d'éliminer complètement crénelage ici. – mattorb