我的主要目的是创建一条原点,其原点位于其他UIBezierPath的中心,外观为ROUND。
let startAngle = CGFloat(-M_PI_2)
let endAngle = CGFloat(M_PI + M_PI_2)
println("Start Angle \(startAngle) , End Angle \(endAngle)")
let centerPoint = CGPointMake(CGRectGetWidth(frame)/2 , CGRectGetHeight(frame)/2)
self.staticLayer.path = UIBezierPath(arcCenter:centerPoint, radius: CGRectGetWidth(frame)/2 - 30.0, startAngle:startAngle, endAngle:endAngle, clockwise: true).CGPath
self.staticLayer.fillColor = UIColor.clearColor().CGColor
self.staticLayer.shouldRasterize = false
self.staticLayer.strokeColor = UIColor.redColor().CGColor
self.staticLayer.lineWidth = 08
self.staticLayer.borderColor = UIColor.greenColor().CGColor
self.staticLayer.borderWidth = 5.0
layer.addSublayer(self.staticLayer)
在这个静态图层之后,我想添加一行(与时钟中的秒相同)
我做到了
var bezierPath: UIBezierPath = UIBezierPath()
bezierPath.moveToPoint(CGPoint(x: self.staticLayer.position.x/2, y: self.staticLayer.position.y/2))
bezierPath.addLineToPoint(CGPoint(x: 50, y: 10))
self.lineLayer.path = bezierPath.CGPath
self.lineLayer.fillColor = UIColor.clearColor().CGColor
self.lineLayer.borderColor = UIColor.clearColor().CGColor
self.lineLayer.strokeColor = UIColor.redColor().CGColor
self.lineLayer.shouldRasterize = false
self.lineLayer.lineWidth = 3.0
self.lineLayer.lineJoin = kCALineJoinBevel
layer.addSublayer(self.lineLayer)
现在,我无法理解 moveToPoint 和 addLineToPoint 的确切传递点。
我想从其他图层的中心开始,这是静态和圆形的。
任何人都可以解释一下,我该如何控制线的起点和长度?
由于
答案 0 :(得分:2)
来自docs:
moveToPoint:
此方法隐式结束当前子路径(如果有)并设置 current指向point参数中的值。结束时 在以前的子路径中,此方法实际上并不关闭子路径。 因此,前一个子路径的第一个和最后一个点不是 相互联系。
对于许多路径操作,必须在发出任何路径之前调用此方法 导致绘制直线或曲线段的命令。
这意味着:采取"笔"向上,移动它而不绘制到指定点。这一点将成为下一次绘图操作的起点。
addLineToPoint:
此方法创建从当前开始的直线段 指向并以point参数指定的点结束。后 添加线段,此方法将当前点更新为 价值观。
您必须设置路径的当前点(使用moveToPoint:方法 或之前通过先前创建的线或曲线段) 你称这种方法。如果路径为空,则此方法不执行任何操作。
这将"画"从当前点到指定点的一条线。行尾将成为新的起点。
您的定位问题似乎就在这一行:
bezierPath.moveToPoint(CGPoint(x: self.staticLayer.position.x/2, y: self.staticLayer.position.y/2))
图层的位置是父空间中左上角的坐标。因此,如果你指定这样的起点,你实际上是在某个地方开始"在外面"它的。这些点也在"这个"中被指定。图层坐标,因此中心点应该是您将应用贝塞尔曲线路径的图层的(width / 2, height / 2)
。