2016-09-28 4 views
1

Я вновь переходит от Obj C до быстры, я не знаю, почему это не работает, потому что в OBJ с он работает нормально, пожалуйста, посмотрите на мой кодCABasicAnimation быстры не работает

Вот мой код

func addAnimationOnLayer(layer: CALayer, position: CGPoint, duration: TimeInterval, delay: TimeInterval, fromPosition: CGPoint, toPostion: CGPoint, key: String) { 
     layer.setAffineTransform(CGAffineTransform(translationX: position.x, y: position.y)) 
     CATransaction.begin() 
     CATransaction.setCompletionBlock { 
      layer.setAffineTransform(CGAffineTransform(translationX: 0, y: 0)) 
     } 
     let theAnimation = CABasicAnimation(keyPath: "transform.translation") 
     theAnimation.isRemovedOnCompletion = false 
     theAnimation.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseInEaseOut) 
     theAnimation.fillMode = kCAFillModeForwards 
     theAnimation.duration = duration 
     theAnimation.beginTime = delay 
     theAnimation.fromValue = fromPosition 
     theAnimation.toValue = toPostion 

     layer.add(theAnimation, forKey: key) 
     CATransaction.commit() 
    } 

и я вызвать функцию с этим

self.addAnimationOnLayer(layer: self.logoImage.layer, position: CGPoint(x: 0, y:100), duration: 0.8, delay: 0.1, fromPosition: CGPoint(x: 0,y: 100), toPostion: CGPoint(x: 0,y: 0), key: "logoStartAnimation") 

ответ

1

Перед вызовом CATransaction.begin() попробуйте позвонить CATransaction.flush().

Ваш код будет выглядеть так:

func addAnimationOnLayer(layer: CALayer, position: CGPoint, duration: TimeInterval, delay: TimeInterval, fromPosition: CGPoint, toPostion: CGPoint, key: String) { 
    layer.setAffineTransform(CGAffineTransform(translationX: position.x, y: position.y)) 
    CATransaction.flush() 
    CATransaction.begin() 
    CATransaction.setCompletionBlock { 
     layer.setAffineTransform(CGAffineTransform(translationX: 0, y: 0)) 
    } 
    let theAnimation = CABasicAnimation(keyPath: "transform.translation") 
    theAnimation.isRemovedOnCompletion = false 
    theAnimation.timingFunction = CAMediaTimingFunction(name:kCAMediaTimingFunctionEaseInEaseOut) 
    theAnimation.fillMode = kCAFillModeForwards 
    theAnimation.duration = duration 
    theAnimation.beginTime = delay 
    theAnimation.fromValue = fromPosition 
    theAnimation.toValue = toPostion 

    layer.add(theAnimation, forKey: key) 
    CATransaction.commit() 
} 

Дайте что попробовать и дайте мне знать, я имел проблемы раньше с анимацией не происходит из-за биты предыдущих анимации оставшихся.

+0

спасибо за помощь, кажется, что анимация сломана (перемещение быстро/пропущено). Даже я пытаюсь удалить материал CATransaction, анимация все еще не работает – Renandus

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