在Objective-C中绘制具有起始和结束角度的椭圆

我正在编写一个iPad应用程序,我在其中渲染表示形状的 XML对象到屏幕上的图形.我试图渲染的对象之一是弧.基本上这些弧为我提供了一个边界矩形以及一个开始和结束角度.

给定属性

> x
> y
>宽度
>身高
> startAngle
> endAngle

使用这些值,我需要绘制弧(基本上是椭圆的一部分).我不能使用以下内容

UIBezierPath *arc = [UIBezierPath bezierPathWithovalInRect:CGRectMake(x,y,width,height)];
    [UIColor blackColor] setstroke];
    [arc stroke];

因为它绘制了一个完整的椭圆.基本上我需要上面但是它需要考虑开始和结束角度,因此只显示椭圆的一部分.我认为这将涉及绘制三次贝塞尔曲线或二次贝塞尔曲线.问题是我不知道如何用我给出的信息计算起点,终点或控制点.

解决方法

您可以通过在椭圆的绘图周围设置剪辑路径来实现您想要的效果.
CGContextSaveGState(theCGContext);
CGPoint center = CGPointMake(x + width / 2.0,y + height / 2.0);
UIBezierPath* clip = [UIBezierPath bezierPathWithArcCenter:center
                                                    radius:max(width,height)
                                                startAngle:startAngle
                                                  endAngle:endAngle
                                                 clockwise:YES];
[clip addLinetoPoint:center];
[clip closePath];
[clip addClip];

UIBezierPath *arc = [UIBezierPath bezierPathWithovalInRect:CGRectMake(x,height)];
[[UIColor blackColor] setstroke];
[arc stroke];

CGContextRestoreGState(theCGContext);

裁剪的确切半径并不重要.它需要足够大,以便它只在末端夹住椭圆,而不是通过所需的弧.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...