2012-12-21 24 views
0

所以我想創建一個圓的一部分,即扇形餅,然後用一個圓圈去除大部分的楔子留下一個外部弧。appendPath產生空心物體核心圖形

這就是我到目前爲止Image 正如你可以看到它正在搞亂某個地方!

我實現這個使用下面的代碼: -

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

我不明白你如何使用偶數填充規則去除該部分的部分。

但是,您可以通過繪製兩個不同半徑的弧線段輕鬆繪製線段的「外部切片」。例如:

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]; 

結果:

enter image description here

+0

謝謝!超級複雜的這樣一個簡單的問題! –

+0

@WillRoberts:不客氣! –

+0

這個利用的一個事實是'addArcWithCenter:radius:startAngle:endAngle:順時針:'和其他類似於UIBezierPath和Cocoa表兄弟(以及類似Quartz中的函數)的方法,將會隱含地從你上一個當前點開始的「lineto」。從該代碼看來,如果沒有當前點,它甚至會隱式「移動」弧的起點。繪製的弧線的一端是這樣一個隱含的線段(在兩條弧線之間);另一個由'closePath'提供,返回到第一個弧的起始點。 –

0

隨着@馬丁 - [R的代碼,有輕微的修改 如果可以指定線寬的CALayer的在其上你會繪製弧段,單個「addArcWithCenter:radius:startAngle:endAngle:順時針:」將爲您完成這項工作。

你必須使用中風,而不是填充(IE)只使用則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]; 

這可能是有用的人......