2014-10-08 3 views
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++ 
} 

} 

나는 이것을 청소할 것이다, 그러나 이것은 작동하지 않는 것처럼 보인다. 초기 선을 그으나 다른 점은 추가되지 않습니다.

더 나은 방법이 있습니까?

답변

1

몇 가지 포인트는 옳은 방향으로 당신을 얻을 수 있습니다 : 당신의 drawRect에서() 당신의 타이머를 시작해서는 안

  • . 대신보기 컨트롤러의 viewDidAppear() 메서드에서 시작하는 것이 좋습니다.
  • 뷰를 다시 그리라는 메시지가 나올 때마다 drawRect()가 호출됩니다. 그래서 지금 당신의 프로그램에 대해 다른 것을 모른 채로, 나는 단지 한번만 호출되는 것 같습니다.
  • update()가 아닌 drawRect()에서 모든 드로잉을 수행해야합니다.
  • update()에서 경로에 점을 추가 한 다음 setNeedsDisplay()를 호출하여 시스템에서 실제로 drawRect()를 가져오고 drawRect()에서 경로를 stroke()합니다.

희망이 있습니다.

+0

감사합니다. 궁금합니다. 전체 곡선을 다시 그리거나 새로운 곡선 만 추가할까요? 왜냐하면 결국 커브가 움직이는 것처럼 보이기 때문에 애니메이션을 만들고 싶기 때문입니다. 따라서 전체 선을 다시 그리는 것이 가장 좋지는 않습니다. 그러나 나는 그 기회를 줄 것이다! – Jonovono

+0

drawRect()에서 모든 것을 다시 그릴 수 있습니다 - 일반적으로 어떻게 작동하는지 알 수 있습니다. 그러나 점차적으로 타이머의 update() 호출을 통해 경로가 보이는 모양 (점을 추가 할 때)이 변경되어 애니메이션처럼 보입니다. 본질적으로, drawRect()가 시스템에 의해 호출 될 때마다 (setNeedsDisplay()에 대한 호출로 움직입니다), 약간 다른 경로를 그립니다. – davecom