2016-08-31 2 views
-1

Приведенный ниже код рисует округленный угол в конце пути (зеленый цвет). Но не в самом начале. Что можно сделать так, чтобы у меня тоже был закругленный угол (где начинается красный цвет). Это не идеальный раунд в самом начале.Закругленный угол для CGRectAddArc

enter image description here

-(void)drawRect:(CGRect)rect{ 


    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGFloat arcStartAngle = M_PI; 
    CGFloat arcEndAngle = 2 * M_PI; 

    CGPoint startPoint = CGPointMake(0,CGRectGetMidY(rect)); 
    CGPoint endPoint = CGPointMake(CGRectGetMaxX(rect),CGRectGetMidY(rect)); 

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

    CGFloat colors[] = 
    { 
     1.0, 0.0, 0.0, 1.0, 
     0.0, 1.0, 0.0, 1.0 
    }; 

    CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, NULL, 2); 

    CGColorSpaceRelease(colorSpace); 



    CGMutablePathRef arc = CGPathCreateMutable(); 

    CGPathMoveToPoint(arc, NULL, startPoint.x, startPoint.y); 


    CGPoint arcCenter = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); 
    CGFloat radius = CGRectGetMidX(rect); 

    CGPathAddArc(arc, NULL, arcCenter.x, arcCenter.y, radius-5.0, 
       arcStartAngle, arcEndAngle, NO); 



    CGPathRef strokedArc = CGPathCreateCopyByStrokingPath(arc, NULL, 10.0f, 
                  kCGLineCapRound, kCGLineJoinRound, 10.0f); 


    CGContextSaveGState(context); 

    CGContextAddPath(context, strokedArc); 
    CGContextClip(context); 

    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0); 

    CGContextDrawPath(context, kCGPathFillStroke); 

    CGGradientRelease(gradient); 
    CGContextRestoreGState(context); 


} 
+0

В вашем чертеже нет углов, закругленных или нет. Не могли бы вы уточнить, в чем проблема? – matt

ответ

1

Я работал на ваш вопрос, и это то, что я нашел. Ваша проблема связана с вашей точки начинаются пути у вас есть

CGPathMoveToPoint(arc, NULL, startPoint.x, startPoint.y); 

но для примера вам нужно начать startPoint.x + 5 потому что вы используете 10 ширины вашего пути, вам нужно изменить эту строку и использовать это вместо

CGPathMoveToPoint(arc, NULL, startPoint.x + 5, startPoint.y); 

и теперь должен работать, это результат

enter image description here

Я надеюсь, что этот час лопнет вас.

Смежные вопросы