2016-02-02 2 views
0

Я немного борюсь с этой простой анимацией линии. Я понял, как его приостановить, но мне нужно, чтобы вернуть анимацию обратно в исходную точку с момента вызова функции resetAnimation().CABasicAnimation reverse (назад)

let pathAnimation = CABasicAnimation(keyPath: "strokeEnd") 
    let pathLayer = CAShapeLayer() 

    func lineAnimation() { 

     let path = UIBezierPath() 
     let screenWidth = self.view.bounds.width 
     let screenHeight = self.view.bounds.height 
     path.moveToPoint(CGPointMake(screenWidth, screenHeight/2)) 
     path.addLineToPoint(CGPointMake(screenWidth - screenWidth, screenHeight/2)) 

     self.pathLayer.frame = self.view.bounds 
     self.pathLayer.path = path.CGPath 
     self.pathLayer.strokeColor = UIColor.whiteColor().CGColor 
     self.pathLayer.fillColor = nil 
     self.pathLayer.lineWidth = 3.0 
     self.pathLayer.lineCap = kCALineCapRound 
     self.pathLayer.speed = 1 

     self.view.layer.addSublayer(pathLayer) 

     self.pathAnimation.duration = 5.0 
     self.pathAnimation.fromValue = 0.0 
     self.pathAnimation.toValue = 1.0 

     pathLayer.addAnimation(pathAnimation, forKey: "animate") 

    } 

    func pauseAnimation() { 

     let pausedTime = pathLayer.convertTime(CACurrentMediaTime(), fromLayer: nil) 
     pathLayer.speed = 0 
     pathLayer.timeOffset = pausedTime 

    } 

    func resetAnimation() { 


    } 
+0

Чтобы вернуться в обратную сторону с определенной скоростью или просто полностью вернуться к первоначальным настройкам в режиме «Вкл.»? –

+0

Чтобы идти в обратном направлении с определенной скоростью –

ответ

-1

Вам просто нужно, чтобы создать новую анимацию и удалить старую. Отправной точкой для новой анимации будет текущее значение этого свойства в вашем слое презентации. Я также рекомендовал бы установить рамку вашего слоя формы на рамки фактической формы безье, а не на весь вид - это хорошая привычка быть в том случае, когда вы начинаете перемещаться вокруг и масштабировать/вращать/и т. Д. В противном случае вы столкнетесь с кучей напуганных конверсий или изменений привязки.

Вот что я хотел бы сделать:

let pathLayer = CAShapeLayer() 

// first, separate your drawing code from your animation code. 
// this way you can call animations without instantiating new objects 
func drawLine() { 
    let path = UIBezierPath() 
    // draw your path with no position translation.. move the layer 
    path.moveToPoint(CGPointMake(view.bounds.width, 0)) 
    path.addLineToPoint(CGPointMake(0, 0)) 
    pathLayer.frame = path.bounds 
    // this line sets the position of the layer appropriately 
    pathLayer.position = view.bounds.width - pathLayer.bounds.width/2 
    pathLayer.path = path.CGPath 
    pathLayer.strokeColor = UIColor.whiteColor().CGColor 
    pathLayer.fillColor = nil 
    pathLayer.lineWidth = 3.0 
    pathLayer.lineCap = kCALineCapRound 
    view.layer.addSublayer(pathLayer) 
} 

func lineAnimation() { 
    let pathAnimation = CABasicAnimation(keyPath: "strokeEnd") 
    pathAnimation.duration = 5.0 
    pathAnimation.fromValue = 0.0 
    pathAnimation.toValue = 1.0 
    pathLayer.addAnimation(pathAnimation, forKey: "strokeEnd") 

} 

func reverseAnimation() { 
    let revAnimation = CABasicAnimation(keyPath: "strokeEnd") 
    revAnimation.duration = 5.0 
    // every Core Animation has a 'presentation layer' that contains the animated changes 
    revAnimation.fromValue = pathLayer.presentationLayer()?.strokeEnd 
    revAnimation.toValue = 0.0 
    pathLayer.removeAllAnimations() 
    pathLayer.addAnimation(revAnimation, forKey: "strokeEnd") 
} 

Имейте в виду, вы также хотите установить свои свойства, так что вы сохранить конечные значения анимации.

 Смежные вопросы

  • Нет связанных вопросов^_^