0
我想要製作實時應用程序的一條線在時間上移動。所以我想不斷給貝塞爾曲線添加值。要測試它,我在做:動態添加值到UIBezierPath
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++
}
}
我會清理它,但這似乎並不奏效。它畫出最初的線條,但是沒有其他的點被添加。
有沒有更好的方法呢?
謝謝!我想知道,這會重新繪製整條曲線還是隻添加新曲線?因爲最終我想製作一個動畫,使其看起來像曲線正在移動,如果這是有道理的。因此重新繪製整條線不會是最好的。但我會給你一槍! – Jonovono 2014-10-08 14:58:44
你在drawRect()中重繪了整個事物 - 通常它是如何工作的。但是,通過定時器的update()調用,您可以逐漸改變路徑的外觀(在您的情況下添加點),使其看起來像動畫。實質上,每次drawRect()都被系統調用(通過調用setNeedsDisplay()進行調用),它正在繪製一條稍微不同的路徑。 – davecom 2014-10-08 19:48:35