0

楕円を描いています

CGRect paperRect = self.bounds;
CGRect strokeRect = CGRectInset(paperRect, 5.0, 5.0);
CGContextAddEllipseInRect(context, strokeRect);
CGContextStrokePath(context);

これをぎざぎざの楕円に変更したいと思っていました(写真を参照)。これを行うための最良の方法を探して、使用する方法があるかどうか疑問に思っていました

setLineDash:count:phase:

線の代わりに円弧/曲線をパターンとして渡しますか? または、これを行うより良い方法はありますか?

更新 ウェインの提案に従って、次のことを試しました。

float a = strokeRect.size.width/2;
float b = strokeRect.size.height/2;

float x1,y1,x2,y2,k;
x1=CGRectGetMinX(strokeRect);
y1=CGRectGetMinY(strokeRect);
int maxAngle = 360;

CGContextBeginPath(context);
CGContextMoveToPoint(context, x1, y1); 
for(int i=0;i<maxAngle;i+=30){

    float cX=cos(DEGREES_TO_RADIANS(i));
    float sX=sin(DEGREES_TO_RADIANS(i));
    k=1/(sqrt(pow((b*cX),2) + pow(a*sX,2)));
    x2=k*a*b*cos(DEGREES_TO_RADIANS(i));
    y2=k*a*b*sin(DEGREES_TO_RADIANS(i));

   CGContextAddArcToPoint(context, x1, y1, x2, y2, 20);
    x1=x2; // make x2 the new x1
    y1=y2;

}

CGContextClosePath(context);
CGContextStrokePath(context);

不規則な絵がいくつか見えますが、視覚的に意味のあるものは何もありません。 ここに画像の説明を入力

4

1 に答える 1

1

ダッシュとして「行を渡す」ことはありません。ダッシュは、線の描画方法の説明です。

「jarred ellipse」形状をトレースする (楕円の代わりに) パスを作成し ( を使用CGContextAddArcToPoint)、それを描画する必要があります。

ポイントはすべて楕円の端にあり、ここで説明する計算で見つけることができます。試したことはありませんが、最初の接点は楕円の中心点になる可能性があると思います...

于 2013-06-08T16:47:19.590 に答える