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
Вы перерисовываете все это в drawRect() - это обычно, как это работает. Тем не менее, вы поэтапно, по вызову вашего таймера update() изменяете, как выглядит путь (в ваших точках добавления точек), поэтому он выглядит как анимация. По сути, каждый раз, когда drawRect() вызывается системой (приводится в движение вашими вызовами setNeedsDisplay()), она рисует несколько другой путь. – davecom