2016-12-29 14 views
11

私は以下のように弧を作りました。私はアーチのコーナーを作りたいの半径を指定することで、角度を起動し、終了角度円弧の角を作る方法

CGContextAddArc(ctx, self.frame.size.width/2 , self.frame.size.height/2, 
self.radius, 2*M_PI, 3*M_PI/2-ToRad(angle), 0); 

を丸めました。そのため、両端に円を描く必要があります。定数を与えるフレームの大きさを使用しているので、動作しません。

enter image description here

+0

あなたのグラフィックライブラリは、ペンの特性を設定する提供してい

のObjective-Cで簡単に設定することができますか? Windows GDIのPS_ENDCAP_ROUNDに似ています。 – MBo

答えて

9

四捨五入するグラフィックス状態パラメータCGContextSetLineJoinを設定してください:CGContextSetLineCap(ctx, kCGLineCapRound);

ここであなたの質問に基づいて、私の研究です。このメソッドは、drawRect:メソッドにあり、メソッドに対して、startAngle、endAngle、およびradiusパラメータのみを与えるために、抽象メソッドを作成しました。もちろん洗練されています。

このメソッドの出力から画像を提供しました。

- (void)drawRect:(CGRect)rect { 
    float startAngle = 0; 
    float endAngle = 60; 
    float radius = 50.0; 

    CGContextRef ctx = [self drawRoundedArcWithStartAngle:startAngle endAngle:endAngle radius:radius]; 
    CGContextStrokePath(ctx); 
} 

- (CGContextRef)drawRoundedArcWithStartAngle:(float)startAngle endAngle:(float)endAngle radius:(float)radius { 

    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    // [CGContextAddArc(ctx, self.frame.size.width/2 , self.frame.size.height/2, radius, 2*M_PI, 3*M_PI/2-(angle * M_PI/180), 0)]; 

    CGContextAddArc(ctx, self.frame.size.width/ 2, self.frame.size.height/2, radius, (startAngle * M_PI/180), (endAngle * M_PI/180), 0); 
    CGContextSetRGBStrokeColor(ctx, 0.0, 0.0, 0.0, 1.0); 
    CGContextSetLineWidth(ctx, 20.0f); 
    CGContextSetLineCap(ctx, kCGLineCapRound); 
    return ctx; 
} 

希望します。

Arc with rounding. Output from the method above.

+0

うまく動作します。 – Saranjith

+0

あなたの問題を解決するならば、この回答を受け入れる@Saranjith – raki

0

あなたは

CGContextSetLineCap(context, kCGLineCapRound); 

スウィフト

context?.setLineCap(.round) 
context?.addArc(center: center, radius: radius, startAngle: startAngle, endAngle: endAngle, clockwise: true/false) 
+0

それは動作しません... – Saranjith

関連する問題