2013-08-23 14 views
11

Zasadniczo potrzebuję kółka z obrysem w innym kolorze, o jednakowej wielkości. Na przykład 1/2 jest niebieskie, a 1/2 czerwone. Obraz (przepraszam za tak zły obraz):UIBezierPath koło do rysowania z różnymi uderzeniami

Example

Jak mogę narysować coś takiego?

+0

Narysuj dwa oddzielne łuki, używając 'UIBezierPath' w różnych kolorach. – Exploring

+0

Tak, możesz to zrobić za pomocą dwóch lub więcej łuków, w zależności od wymaganej liczby kolorów. – CodenameLambda1

Odpowiedz

23

Istnieje wiele sposobów, aby to zrobić, ale jest po prostu narysować dwie Beziera ścieżki, jeden dla każdej strony:

- (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]; 
} 

Albo, jeśli chcesz to zrobić w rdzeń graficzny:

- (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

Można to zrobić bez korzystania z funkcji CG, ustawiając kolory obrysu za pomocą '[[UIColor red/blueColor] setStroke]' zamiast używać 'CGContextSetStrokeColorWithColor (...)' – severin

+0

Uzgodnione. Zmodyfikowałem to, aby zilustrować obie techniki. – Rob