如何使用UIBezierPathwithArcCenter在iOS中绘制完整的圆圈?

时间:2015-02-10 20:45:18

标签: ios iphone cocoa-touch swift uibezierpath

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

3 个答案:

答案 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)

结果:

enter image description here

答案 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]];