2016-10-31 14 views
1

У меня есть один анимации, которая оживляет маску слоя успешно:Два CABasicAnimations на двух разных слоях Одновременно

// create new animation 
let anim = CABasicAnimation(keyPath: "path") 
anim.delegate = self 
anim.fromValue = self.maskLayerMWB.path 
anim.toValue = path2.CGPath 
anim.duration = 0.2 
anim.timingFunction = CAMediaTimingFunction(controlPoints: 0, 1, 1, 1) 
self.maskLayerMWB.addAnimation(anim, forKey: nil) 

CATransaction.begin() 
CATransaction.setDisableActions(true) 
self.maskLayerMWB.path = path2.CGPath 
CATransaction.commit() 

Выше работает отлично. Однако сразу после этого мне нужно добавить еще один CABasicAnimation, который применяется к другому CAShapeLayer.

Однако, когда я добавляю их вместе следующим образом, вторая анимация не живой, только первый делает:

// create new animation 
    let anim = CABasicAnimation(keyPath: "path") 
    anim.delegate = self 
    anim.fromValue = self.maskLayer.path 
    anim.toValue = path2.CGPath 
    anim.duration = 0.2 
    self.maskLayer.addAnimation(anim, forKey: nil) 

    //Create second Animation 
    let anim2 = CABasicAnimation(keyPath: "path") 
    anim2.delegate = self 
    anim2.fromValue = self.shapeLayer.path 
    anim2.toValue = path2.CGPath 
    anim2.duration = 0.2 
    self.shapeLayer.addAnimation(anim2, forKey: nil) 

    CATransaction.begin() 
    CATransaction.setDisableActions(true) 
    self.maskLayer.path = path2.CGPath 
    self.shapeLayer.path = path2.CGPath 
    CATransaction.commit() 

мне нужны обе анимации происходят одновременно.

+0

Что "не работает"? – matt

+0

Еще раз. Вторая анимация не оживляет, она просто переходит к окончательному значению (форме). – Gizmodo

+1

Удалите начало и фиксацию и переместите три строки, которые они содержат, в начало. – matt

ответ

3

я был в состоянии исправить это с помощью CATransaction.setCompletionBlock

CATransaction.begin() 
    CATransaction.setDisableActions(true) 

    // create new animation 
    let anim = CABasicAnimation(keyPath: "path") 
    anim.delegate = self 
    anim.fromValue = self.maskLayer.path 
    anim.toValue = path2.CGPath 
    anim.duration = 0.2 
    self.maskLayer.addAnimation(anim, forKey: nil) 

    //Create second Animation 
    let anim2 = CABasicAnimation(keyPath: "path") 
    anim2.delegate = self 
    anim2.fromValue = self.shapeLayer.path 
    anim2.toValue = path2.CGPath 
    anim2.duration = 0.2 
    self.shapeLayer.addAnimation(anim2, forKey: nil) 

    CATransaction.setCompletionBlock({ 
     self.maskLayer.path = path2.CGPath 
     self.shapeLayer.path = path2.CGPath 
    }) 

    CATransaction.commit() 
+1

Достаточно хорошо для меня! (На самом деле та же идея, что и я пытался делать, но неважно, почему.) – matt

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

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