2017-02-21 7 views
0

У меня есть две анимации, которые я хочу объединить в группу.Core Animation - отдельные тайминги анимаций в группе

Они выглядят так:

func animate(circle: UIView) { 

    var animations = [CABasicAnimation]() 

    let opacityAnimation = CABasicAnimation(keyPath: "opacity") 
    opacityAnimation.repeatCount = Float.infinity 
    opacityAnimation.autoreverses = true 
    opacityAnimation.fromValue = 0.0 
    opacityAnimation.toValue = 0.40 

    animations.append(opacityAnimation) 

    let scaleAnimation = CABasicAnimation(keyPath: "transform.scale") 
    scaleAnimation.repeatCount = Float.infinity 
    scaleAnimation.autoreverses = true 
    scaleAnimation.fromValue = 0.8 
    scaleAnimation.toValue = 1 

    animations.append(scaleAnimation) 

    let group = CAAnimationGroup() 
    group.duration = 1.4 
    group.repeatCount = FLT_MAX 
    group.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 
    group.animations = animations 

    circle.layer.add(group, forKey: nil) 
} 

Есть ли способ я могу установить отдельный срок для первой анимации и отдельно от второго? Например, я хочу 3 секунды для opacityAnimation и 1 секунду для scaleAnimation

Как это сделать?

+0

проверка с этим анс: http://stackoverflow.com/a/27884155/4831524 шкала –

ответ

1

попробуйте этот код, и я не тестировал этот код.

func animate(circle: UIView) { 

     CATransaction.begin() 
     CATransaction.setCompletionBlock({ 

      let scaleAnimate:CABasicAnimation = CABasicAnimation(keyPath: "transform.scale") 
      scaleAnimate.fromValue = 1.0 
      scaleAnimate.toValue = 0.0 
      scaleAnimate.duration = 0.9 
      scaleAnimate.repeatCount = 1 
      scaleAnimate.removedOnCompletion = true 
      scaleAnimate.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn) 
      circle.layer.addAnimation(scaleAnimate, forKey: "scaleSmallAnimation") 
     }) 

     let opacityAnimation = CABasicAnimation(keyPath: "opacity") 
     opacityAnimation.repeatCount = 1 
     opacityAnimation.autoreverses = true 
     opacityAnimation.fromValue = 1.0 
     opacityAnimation.toValue = 0.40 
     opacityAnimation.duration = 2.0 

     circle.layer.addAnimation(opacityAnimation, forKey: "opacity") 
     CATransaction.commit() 
    } 
+0

не работает, она одушевляет непрозрачность только –

+0

@Alexey, код обновлен, протестирован и работает нормально .. –