所以我试图创建一个圆形的片段,即一个饼形切片,然后使用圆圈去除大部分楔形,留下一个外弧。
这是我到目前为止 正如你所看到的那样,它正在搞乱某个地方!
我使用以下代码实现此目的: -
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];
任何人都可以帮助我吗?
答案 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];
结果:
答案 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];
这可能对某人有用......