动态地将值添加到UIBezierPath

时间:2014-10-08 04:56:05

标签: ios objective-c swift uikit uibezierpath

我希望能够实时应用一条线。所以我想不断为Bezier曲线添加值。为了测试它,我正在做:

import UIKit

class TestView: UIView {
var arr = [CGPointMake(0, 0), CGPointMake(120, 150), CGPointMake(260, 150), CGPointMake(210, 30)]
 var control = CGPointMake(5, 5)
let path = UIBezierPath()
var count = 0

override func drawRect(rect: CGRect) {
    path.lineWidth = 3.0
    path.moveToPoint(CGPointMake(20, 40))
    path.addQuadCurveToPoint(arr[1], controlPoint: control)
    path.stroke()

    var timer = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: Selector("update"), userInfo: nil, repeats: true)

}

func update() {
    var p = arr[count]

    path.addQuadCurveToPoint(p, controlPoint: control)
    path.stroke()
    count++
}

}

我会清理它,但这似乎不起作用。它绘制了初始线,但是没有添加任何其他点。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

有几点可以帮助你找到正确的方向:

  • 您不应该从drawRect()启动计时器。请考虑从视图控制器的viewDidAppear()方法开始。
  • 每次视图被重绘时都会调用
  • drawRect();所以现在不知道关于你的程序的任何其他内容,我猜它只被调用一次。
  • 您应该在drawRect()中完成所有绘图而不是update()。
  • 在update()中添加点到路径,然后调用setNeedsDisplay()实际获取系统调用的drawRect(),并在drawRect()中使用stroke()路径。

希望这有帮助!