appendPath生成空心对象Core Graphics

时间:2012-12-21 16:42:58

标签: iphone objective-c core-graphics

所以我试图创建一个圆形的片段,即一个饼形切片,然后使用圆圈去除大部分楔形,留下一个外弧。

这是我到目前为止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];

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

@Martin R 的代码略作修改, 如果您可以指定要绘制弧线段的线宽的CALayer ,则单个“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];

这可能对某人有用......