web-dev-qa-db-fra.com

Comment retarder une CABasicAnimation?

J'ai un CABasicAnimation et je veux le démarrer après un certain délai. Dans UIKit, je peux spécifier des retards. Le protocole CAMediaTiming a une propriété timeOffset mais je ne vois aucun effet. Mon prochain essai consiste à utiliser GCD pour le retarder, mais cela semble exagéré.

46
openfrog

Ne devriez-vous pas utiliser le [CAMediaTiming beginTime] propriété ( référence )?

Voir Personnalisation du timing d'une animation dans le Core Animation Programming Guide .

CABasicAnimation *animation;
animation.beginTime = CACurrentMediaTime() + 0.3; //0.3 seconds delay
117
trojanfoe

Dans Swift 3.0:

func animateYourView () {
   let myDelay = 5.0
   let scalePulseAnimation: CABasicAnimation = CABasicAnimation(keyPath: "transform.scale")
   scalePulseAnimation.beginTime = CACurrentMediaTime() + myDelay
   scalePulseAnimation.duration = 0.5
   scalePulseAnimation.repeatCount = 2.0
   scalePulseAnimation.autoreverses = true
   scalePulseAnimation.fromValue = 1.0
   scalePulseAnimation.toValue = 0.5
   myView.layer.add(scalePulseAnimation, forKey: "scale")
}

Où la ligne clé pour le retard est:

  scalePulseAnimation.beginTime = CACurrentMediaTime() + myDelay
16
Dave G