Sto usando un CAKeyframeAnimation per animare una vista lungo un CGPath. Quando l'animazione è terminata, mi piacerebbe poter chiamare qualche altro metodo per eseguire un'altra azione. C'è un buon modo per farlo?Come specificare il selettore quando CAKeyframeAnimation è terminato?
Ho guardato usando setAnimationDidStopSelector di UIView, tuttavia dai documenti questo sembra si applica solo quando viene utilizzato all'interno di un blocco di animazione UIView (beginAnimations e commitAnimations). Ho anche fatto una prova nel caso, ma non sembra funzionare.
Ecco alcuni esempi di codice (questo è all'interno di un metodo sottoclasse personalizzata UIView):
// These have no effect since they're not in a UIView Animation Block
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
// Set up path movement
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"path"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
pathAnimation.duration = 1.0f;
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, self.center.x, self.center.y);
// add all points to the path
for (NSValue* value in myPoints) {
CGPoint nextPoint = [value CGPointValue];
CGPathAddLineToPoint(path, NULL, nextPoint.x, nextPoint.y);
}
pathAnimation.path = path;
CGPathRelease(path);
[self.layer addAnimation:pathAnimation forKey:@"pathAnimation"];
Una soluzione stavo considerando che dovrebbe funzionare, ma non sembra come il modo migliore, è quello di utilizzare PerformSelector di NSObject: withObject: afterDelay :. Finché imposto il ritardo uguale alla durata dell'animazione, dovrebbe andare bene.
C'è un modo migliore? Grazie!
Dolce, grazie! Devo averlo perso quando ho controllato i documenti. – Daren