如何使用CoreGraphics绘制半圆形?

6
我正在尝试使用Core Graphics绘制一个半圆,并用一些颜色来填充它。我想通过使用CALayer将颜色替换为图像。有人可以帮忙解决如何实现吗?谢谢!
代码如下:
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextMoveToPoint(context, 0, 500);
CGContextAddArc(context, 60, 500, 50, 90, 180, 0);
CGContextStrokePath(context);

1
这个链接可能会对你有所帮助:https://dev59.com/qm865IYBdhLWcg3wnP2a,同时也可以查看:https://dev59.com/1nE85IYBdhLWcg3wUByz。 - Devang
4个回答

7

您需要用弧度(radians)指定角度,而非度数。180度 = π 弧度。所以,在您的例子中:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextMoveToPoint(context, 10, 500);
CGContextAddArc(context, 60, 500, 50, M_PI / 2, M_PI, 0);
CGContextStrokePath(context);

请注意,我还将起始点(...MoveToPoint)向右移动了10个像素,因为那里是弧形的起点。


5
给出的答案在我的iOS 7上无法正常工作!
我创建了一个小类别,用于创建一个百分比角度的圆形。如果您只想创建一个半圆,您仍然可以采用这种方法。
这是:GitHub链接
那就是它的样子:

persentage circle


文本没有显示在结果中。我认为你没有将文本添加到图像上下文中,对吗? - Mohd Sadham

0
CGPoint circleCenter = CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2);

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2);
CGContextMoveToPoint(context, circleCenter.x, circleCenter.y);


CGContextAddArc(context, circleCenter.x, circleCenter.y, 50, 90, 180, 0);
CGContextAddLineToPoint(context, circleCenter.x, circleCenter.y);
CGContextSetFillColorWithColor(context, [UIColor colorWithPatternImage:[UIImage imageNamed:@"add-icon.png"]].CGColor);
CGContextFillPath(context);

CGContextAddArc(context, circleCenter.x, circleCenter.y, 50, 180, 90, 0);
CGContextAddLineToPoint(context, circleCenter.x, circleCenter.y);
CGContextSetFillColorWithColor(context, [UIColor colorWithPatternImage:[UIImage imageNamed:@"appIcon_58.png"]].CGColor);
CGContextFillPath(context);

-2

你需要的是一个很棒的工具,它可以让你在绘制图形后可视化Core Graphics代码。

它叫做Paint Code。

PaintCode


Piantcode能用来创建自定义控件吗?比如说,我想要绘制一个填充的弧形,并在弧形中央放置一段文本,而且我希望在运行时可以更改这段文本。实际上,这相当于创建一个新的控件。PaintCode能做到吗?从他们的网站上看不太明显。 - OneGuyInDc
安装它(演示版)并查看。我不知道。 - bandejapaisa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接