несколько CAKeyframeAnimation в разных слоях одновременно

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

Есть идеи?

Заранее спасибо.

5
задан Eduardo Coelho 9 December 2010 в 17:21
поделиться