CoreGraphics == Good Times.
E 'stato un po' che ho fatto niente a mano libera per così dire, quello che faccio in questi giorni è quello di costruire tutto in anticipo le operazioni di disegno. Ricordate che c'è un 'puntatore' implicita, dai giorni di Logo, e si può passare senza fare la mossa un'operazione di disegno, ma è necessario specificarlo. Penso che un buon approccio (almeno per le figure statiche) sia quello di creare quei percorsi che dovrete prima disegnare, quindi usare il percorso più e più volte per cose come riempimento, tratto, ombreggiatura.
CGColorRef fillColor = // yadda
CGColorRef strokeColor = // yadda
const CGFloat radius = 5.0;
// Create the path first - rounded rectangle
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 100.0 - radius, 10.0);
CGPathAddLineToPoint(path, NULL, 10.0 + radius, 10.0);
CGPathAddArcToPoint(path, NULL, 10.0, 10.0, 10.0, 10.0 + radius, radius);
CGPathAddLineToPoint(path, NULL, 10.0, 100.0 - radius);
CGPathAddArcToPoint(path, NULL, 10.0, 100.0, 10.0 + radius, 100.0, radius);
CGPathAddLineToPoint(path, NULL, 100.0 - radius, 100.0);
CGPathAddArcToPoint(path, NULL, 100.0, 100.0, 100.0, 100.0 - radius, radius);
CGPathAddLineToPoint(path, NULL, 100.0, 10.0 + radius);
CGPathAddArcToPoint(path, NULL, 100.0, 10.0, 100.0 - radius, 10.0, radius);
CGPathCloseSubpath(path);
// Then use it in your draw commands
CGContextSetStrokeColor(context, CGColorGetComponents(strokeColor));
CGContextSetFillColor(context, CGColorGetComponents(fillColor));
CGContextSetLineJoin(context, kCGLineJoinMiter);
CGContextSetLineWidth(context, strokeWidth);
CGContextAddPath(context, path);
CGContextDrawPath(context, kCGPathFillStroke);
CGPathRelease(path);
Ecc È possibile rilasciare il percorso, alla fine, se si desidera, o mantenere il riferimento intorno per un uso più tardi.
Grazie per l'invio del codice di lavoro. Ogni volta che ho avuto bisogno di CGPathAddArcToPoint ho dovuto capire le cose per errore e provare a non capire. La documentazione di Apple chiama i valori endpoint, ma nella Figura 3.5 parla di punti tangenti. Tracciando su carta quello che stava facendo il tuo primo parametro (10,10), ora vedo che è essenzialmente il punto d'angolo, o in termini di una curva quadratica di bezier, è il punto di controllo. Lavorare questa comprensione nella forma su cui stavo lavorando l'ha trasformato da un rettangolo inclinato a un bel rettangolo arrotondato. – tobinjim
Felice di essere al servizio – QED
Non è necessario CGPathRelease (percorso); alla fine? –