我希望startAngle处于90度,即π/ 2,所以我想如果我将endAngle设为90度,那么它就会形成一个完整的圆,但是没有绘制任何东西。
当我把开始&如下所示,在不同程度的结束角度,绘制路径,但它不是一个完整的圆。
到目前为止我正在使用的代码,但是如果startAngle是90度以便绘制一个完整的圆圈,我似乎无法弄清楚endAngle应该是什么。
有人可以帮忙吗?
override func drawRect(rect: CGRect) {
let center = CGPoint(x: bounds.width / 2, y: bounds.height / 2)
let radius: CGFloat = max(bounds.width, bounds.height)
let startAngle: CGFloat = 3 * π / 4
let endAngle: CGFloat = π / 4
var path = UIBezierPath(arcCenter: center,
radius: bounds.width / 2 - arcWidth / 2,
startAngle: startAngle,
endAngle: endAngle,
clockwise: true)
path.lineWidth = arcWidth
path.lineCapStyle = kCGLineCapRound
counterColor.setStroke()
path.stroke()
}
答案 0 :(得分:8)
要绘制整圆,起始角度和结束角度必须相差 2π。如果您希望起始角度为π/ 2,那么您可以选择
let startAngle = CGFloat(M_PI/2)
let endAngle = CGFloat(M_PI/2 + 2.0*M_PI)
答案 1 :(得分:2)
如果要使用该方法创建完整的圆,则必须要求它绘制2π弧度。
import XCPlayground
import UIKit
let π = CGFloat(M_PI)
let bounds = CGRectMake(0, 0, 300, 300)
let arcWidth = CGFloat(6)
let center = CGPoint(x: bounds.width / 2, y: bounds.height / 2)
let radius: CGFloat = max(bounds.width, bounds.height)
let startAngle: CGFloat = π / 2
let endAngle: CGFloat = startAngle + 2 * π
var path = UIBezierPath(arcCenter: center,
radius: bounds.width / 2 - arcWidth / 2,
startAngle: startAngle,
endAngle: endAngle,
clockwise: true)
XCPCaptureValue("path", path)
结果:
答案 2 :(得分:1)
我知道你的问题是专门要求UIBezierPathwithArcCenter
。
但是,如果您想要的只是画一个圆圈,为什么不使用bezierPathWithOvalInRect
?
CGRect circleLayerRect = CGRectMake(20, 20, 50, 50);
CAShapeLayer *circleLayer = [CAShapeLayer layer]; //Create the layer
[circleLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:circleLayerRect] CGPath]]; //Set the rect.
[[self.view layer] addSublayer:circleLayer]; //Add the layer
您未能指定圆的属性,但您可以添加和更改笔触和填充颜色,如下所示:
[circleLayer setStrokeColor:[[UIColor redColor] CGColor]];
[circleLayer setFillColor:[[UIColor clearColor] CGColor]];