0

だから私は円のセグメント、つまりパイスライスを作成しようとしています。次に円を使用してくさびの大部分を削除し、外側の弧を残します。

これは私がこれまでに持っているもの画像 です。ご覧のとおり、どこかで混乱しています。

私は次のコードを使用してこれを達成します:-

UIBezierPath* theStroke = [UIBezierPath bezierPathWithRoundedRect:mainCutout cornerRadius:theRadius];
[theOrangeColor setFill];
theStroke.usesEvenOddFillRule = YES;
[theStroke fill];
[theStroke stroke];
[theStroke setMiterLimit:2.0];


UIBezierPath *aSegment = [UIBezierPath bezierPath];
aSegment.usesEvenOddFillRule = YES;

[aSegment moveToPoint:theCenter];
[aSegment addLineToPoint:theCenter];
[aSegment addArcWithCenter:theCenter radius:theRadius startAngle:startAngle endAngle:endAngle clockwise:YES];
[aSegment addLineToPoint:theCenter];
[aSegment appendPath:theStroke];

[theRedColor setFill];
[aSegment fill];
[aSegment stroke];
[aSegment closePath];

誰か助けてもらえますか?

4

2 に答える 2

4

偶数奇数の塗りつぶしルールを使用して、セクターのその部分を削除する方法がわかりません。

ただし、半径の異なる2つの円弧セグメントを描画することで、セグメントの「外側のスライス」を簡単に描画できます。例:

CGPoint theCenter = CGPointMake(100., 100.);
CGFloat innerRadius = 50.;
CGFloat outerRadius = 60.;
CGFloat startAngle = M_PI;
CGFloat endAngle = 3*M_PI/2;

UIBezierPath *aSegment = [UIBezierPath bezierPath];
[aSegment addArcWithCenter:theCenter radius:innerRadius startAngle:startAngle endAngle:endAngle clockwise:YES];
[aSegment addArcWithCenter:theCenter radius:outerRadius startAngle:endAngle endAngle:startAngle clockwise:NO];
[aSegment closePath];
[[UIColor redColor] setFill];
[aSegment fill];

結果:

ここに画像の説明を入力してください

于 2012-12-21T17:14:14.757 に答える
0

@Martin Rのコードを少し変更して、円弧セグメントを描画するCALayerのlineWidthを指定できる場合は、単一の「addArcWithCenter:radius:startAngle:endAngle:clockwise:」で処理できます。 。

塗りつぶしの代わりにストロークを使用する必要があります。(つまり)strokeColorを使用するだけです。

例えば:

static inline double radians (double degrees)
{
    return degrees * M_PI/180;
}

CAShapeLayer * shapeLayer = [CAShapeLayer layer];
shapeLayer.lineWidth = 10;
shapeLayer.fillColor = [UIColor clearColor].CGColor;
shapeLayer.strokeColor = [UIColor redColor].CGColor;
CGFloat radius = 50.0;
shapeLayer.path = [[UIBezierPath bezierPathWithArcCenter:centerPoint radius:radius startAngle:radians(startingAngle) endAngle:radians(endingAngle) clockwise:1 ]CGPath ];
[self.layer addSublayer:shapeLayer];

これは誰かに役立つかもしれません...

于 2013-05-22T08:07:47.657 に答える