2013-08-23 19 views
11

Fondamentalmente ho bisogno di avere un cerchio con tratto di colore diverso, tutti di dimensioni uguali. Ad esempio, 1/2 è blu e 1/2 è rosso. Immagine (scusate per così cattiva immagine):UIBezierPath disegna un cerchio con tratti diversi

Example

Come posso disegnare qualcosa di simile?

+0

Disegna due archi separati usando 'UIBezierPath' con colori diversi. – Exploring

+0

Sì, puoi farlo con due o più archi, a seconda del numero di colori richiesto. – CodenameLambda1

risposta

23

Ci sono molti modi per farlo, ma uno è quello di disegnare proprio due percorsi di Bezier, uno per ogni lato:

- (void)drawRect:(CGRect)rect 
{ 
    UIBezierPath *blueHalf = [UIBezierPath bezierPath]; 
    [blueHalf addArcWithCenter:CGPointMake(100, 100) radius:90.0 startAngle:-M_PI_2 endAngle:M_PI_2 clockwise:YES]; 
    [blueHalf setLineWidth:4.0]; 
    [[UIColor blueColor] setStroke]; 
    [blueHalf stroke]; 

    UIBezierPath *redHalf = [UIBezierPath bezierPath]; 
    [redHalf addArcWithCenter:CGPointMake(100, 100) radius:90.0 startAngle:M_PI_2 endAngle:-M_PI_2 clockwise:YES]; 
    [redHalf setLineWidth:4.0]; 
    [[UIColor redColor] setStroke]; 
    [redHalf stroke]; 
} 

Oppure, se si vuole fare questo in core grafico:

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetLineWidth(context, 4); 

    CGContextSetStrokeColorWithColor(context, [[UIColor blueColor] CGColor]); 
    CGContextAddArc(context, 100, 100, 90, -M_PI_2, M_PI_2, FALSE); 
    CGContextStrokePath(context); 

    CGContextSetStrokeColorWithColor(context, [[UIColor redColor] CGColor]); 
    CGContextAddArc(context, 100, 100, 90, M_PI_2, -M_PI_2, FALSE); 
    CGContextStrokePath(context); 
} 
+0

Si può fare senza usare le funzioni CG impostando i colori del tratto usando '[[UIColor red/blueColor] setStroke] invece di usare' CGContextSetStrokeColorWithColor (...) ' – severin

+0

Concordato. Ho modificato questo per illustrare entrambe le tecniche. – Rob

Problemi correlati