如何用UIBezierPathwithArcCenter在iOS画一个完整的圆?

How to draw a complete circle in iOS with UIBezierPathwithArcCenter?

我希望 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()
}

我知道你的问题是专门针对 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]];

要画一个完整的圆,起始角和结束角必须相差 2π。如果您希望起始角度为 π/2 那么您可以选择

let startAngle = CGFloat(M_PI/2)
let endAngle = CGFloat(M_PI/2 + 2.0*M_PI)

如果要使用该方法创建一个完整的圆,则必须要求它绘制 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)

结果: