How to delay a CABasicAnimation?
I have a CABasicAnimation
and want to start it after a delay. In UIKit I can specify delays. The CAMediaTiming
protocol has a timeOffset
property but I can't see an effect. My next try is to use GCD to delay it but it feels like overkill.
Shouldn't you be using the [CAMediaTiming beginTime]
property (reference)?
See Customizing the Timing of an Animation in the Core Animation Programming Guide.
CABasicAnimation *animation;
animation.beginTime = CACurrentMediaTime() + 0.3; //0.3 seconds delay
In 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")
}
Where the key line for the delay is:
scalePulseAnimation.beginTime = CACurrentMediaTime() + myDelay