了解UIBezierPath的moveToPoint和addLineToPoint方法?

时间:2015-08-22 08:41:28

标签: ios uibezierpath

我的主要目的是创建一条原点,其原点位于其他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 的确切传递点。

我想从其他图层的中心开始,这是静态和圆形的。

任何人都可以解释一下,我该如何控制线的起点和长度?

由于

1 个答案:

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