¿Alguien ahora cómo puedo animar varias capas al mismo tiempo usando CAKeyframeAnimation? Cada capa tiene su propio objeto CAKeyframeAnimation. Echar un vistazo al siguiente código:CAKeyframeAnimation múltiple en diferentes capas al mismo tiempo
tengo un método que recibe un objeto, crea la CAKeyframeAnimation y se une la animación a la misma:
- (void)animateMovingObject:(CALayer*)obj
fromPosition:(CGPoint)startPosition
toPosition:(CGPoint)endPosition
duration:(NSTimeInterval)duration {
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
//pathAnimation.fillMode = kkCAFillModeRemoved; // default
//pathAnimation.removedOnCompletion = YES; // default
pathAnimation.duration = duration;
// create an empty mutable path
CGMutablePathRef curvedPath = CGPathCreateMutable();
// set the starting point of the path
CGPathMoveToPoint(curvedPath, NULL, startPosition.x, startPosition.y);
CGPathAddCurveToPoint(curvedPath, NULL,
startPosition.x, endPosition.y,
startPosition.x, endPosition.y,
endPosition.x, endPosition.y);
pathAnimation.path = curvedPath;
[obj addAnimation:pathAnimation forKey:@"pathAnimation"];
CGPathRelease(curvedPath);
}
Ahora, supongamos que tengo 3 capas añaden como una subcapa de mi juego de mesa y yo hacemos las siguientes llamadas:
CALayer obj1 = ... // set up layer and add as sublayer
[self animateMovingObject:obj1
fromPosition:CGPointMake(0.0, 0.0)
toPosition:CGPointMake(100.0, 100.0)
duration:2.0];
CALayer obj2 = ... // set up layer and add as sublayer
[self animateMovingObject:obj2
fromPosition:CGPointMake(0.0, 0.0)
toPosition:CGPointMake(150.0, 100.0)
duration:2.0];
CALayer obj3 = ... // set up layer and add as sublayer
[self animateMovingObject:obj3
fromPosition:CGPointMake(0.0, 0.0)
toPosition:CGPointMake(200.0, 100.0)
duration:2.0];
al hacer esto, puedo ver sólo el obj3
se mueva de la posición (0.0, 0.0) a (200.0, 100.0). ¿Qué me estoy perdiendo? ¿Debo usar NSOperationQueue/Threads? El uso del método delegado animationDidStart:
de CAKeyframeAnimation no parece ser útil en este contexto.
¿Alguna idea?
Gracias de antemano.
Gracias por responder Brad. Aunque la posición de inicio/final de la animación no es mi problema, usted hizo buenas observaciones. En mi caso, eliminé OnCompletion = YES de forma redundante (es el valor predeterminado). Mis pasos con respecto a esto son: 1) establecer la posición de la capa a su posición final; 2) calcule la posición inicial/final de la animación por separado (en la cual la posición final de la animación es la posición actual de la capa). También dejé 'fillMode' en su valor predeterminado (kCAFillModeRemoved). Mi problema no es la posición de las capas durante/después de las animaciones, tiene que ver con las animaciones secuenciales. –
Si configuro la propiedad de delegado de las tres animaciones, observo en la devolución de llamada delegada 'animationDidStop: finished:' que las primeras 2 animaciones llaman a este método con el argumento 'finished = NO', y el último (que corresponde al capa que veo que está siendo animada) get's 'finished = YES'. Esto tiene sentido para lo que veo, pero me pregunto qué es lo que detiene mis animaciones. No estoy llamando a ningún método de 'detención' en mi código, solo llamo a los métodos 'animateMovingObject: ..' tres veces de forma secuencial. Gracias –
Edito mi pregunta con las "actualizaciones", aunque el problema todavía ocurre. –