Salutations! J'essaye de dessiner une série de cercles dans un CALayer qui réside dans un UISCrollView zoomable. C'est la couche qui zoome sur pincement. Si je dessine les cercles à l'aide CAShapeLayer, ils zoom magnifiquement:Dessin anti-aliasé dans un CALayer
CAShapeLayer plotLayer = [CAShapeLayer layer];
plotLayer.bounds = self.bounds;
plotLayer.anchorPoint = CGPointZero;
plotLayer.position = CGPointZero;
CGMutablePathRef path = CGPathCreateMutable();
for (id one in many) {
CGRect ellipseRect = [one circleRect];
CGPathAddEllipseInRect(path, NULL, ellipseRect);
}
plotLayer.path = path
CFRelease(path);
[self.layer addSublayer:plotLayer];
[plotLayer setNeedsDisplay];
Cependant, lorsque je tente de les dessiner avec des graphiques de base de vanille dans mon drawLayer: inContext: méthode, les cercles deviennent très Jaggy (carrément pro-crénelage !) Aucun montant de anticrénelage tripotage semble aider:
-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{
CGContextSetAllowsAntialiasing(context, true);
CGContextSetShouldAntialias(context, true);
CGContextClip(context);
for (id one in many) {
CGRect ellipseRect = [one circleRect];
CGContextStrokeEllipseInRect(context, ellipseRect);
}
}
J'essaie de comprendre ce que CAShapeLayer fait pour obtenir cette belle anticrénelage de sorte que (en dehors de ma propre gouverne) je peux tirer pleinement parti de graphiques de base dans mon dessin plutôt que juste le coup/remplissage que je peux obtenir avec CAShapeLayer. Est-ce que je manque juste une transformation quelque part?
Merci beaucoup!
merci pour l'idée, mais pas de chance. CGContextSetInterpolationQuality n'a aucun effet. J'ai également essayé CGContextSetFlatness qui n'a également eu aucun effet. – kalperin