Кто-нибудь теперь может анимировать несколько слоев одновременно с помощью CAKeyframeAnimation? Каждый слой имеет свой собственный объект CAKeyframeAnimation. Взгляните на код ниже:
У меня есть метод, который получает объект, создает CAKeyframeAnimation и прикрепляет к нему анимацию:
- (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);
}
Теперь предположим, что у меня есть 3 слоя, добавленные в качестве подслоя в мою настольную игру, и я выполните следующие вызовы:
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];
Таким образом, я вижу, что только obj3
перемещается из позиции (0.0, 0.0) в (200.0, 100.0).
Что мне не хватает? Должен ли я использовать NSOperationQueue / Threads?
Использование метода делегата animationDidStart:
CAKeyframeAnimation, похоже, бесполезно в этом контексте.
Есть идеи?
Заранее спасибо.