2016-08-31 3 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); 

を持っていますが、あなたの例のためにあなたがあなたのパスの幅の10を使用しているので、あなたがこの行と使用を変更する必要があるので、startPoint.x + 5に始める必要があるあなたの始まるパスポイントに関連していますこれは、代わりに

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

と動作するようになりました、これは私がこの時間を期待した結果

enter image description here

ですあなたをelps。

関連する問題