如何用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)
结果:
我希望 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)
结果: