UIBezierPath draw circle with different strokes

后端 未结 1 1509
广开言路
广开言路 2021-02-03 11:16

Basically I need to have a circle with stroke in different color, all equal in size. For example, 1/2 is blue and 1/2 is red. Image (sorry for so bad image):

相关标签:
1条回答
  • 2021-02-03 11:46

    There are lots of ways to do it, but one is to just draw two bezier paths, one for each side:

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

    Or, if you want to do this in Core Graphics:

    - (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 讨论(0)
提交回复
热议问题