Кто-нибудь теперь, как я могу анимировать несколько слоев одновременно с помощью 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, кажется, не является полезным в этом контексте.
Есть идеи?
Заранее спасибо.