Множественная анимация CALayers -Режим заливки

Я разделяю экран на маленькие плитки, а затем анимирую каждую плитку, чтобы выполнить переход :

    for (int x=0; x<number_of_x_splits; x++) {

    for (int y=0; y<number_of_y_splits; y++) {

        CGSize splitSize = CGSizeMake(screenBounds.width / number_of_x_splits, screenBounds.height / number_of_y_splits);

        CATransformLayer *transformLayer = [CATransformLayer layer];
        [transformLayer setFrame:CGRectMake(splitSize.width * x, splitSize.height * y, splitSize.width, splitSize.height)];
        [transformLayer setPosition:CGPointMake((splitSize.width * x) + splitSize.width / 2, (splitSize.height * y) + splitSize.height / 2)];

       ... adding some sublayers to transformLayer...

        CABasicAnimation *rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
        [rotate setDuration:5.0];
        [rotate setFromValue:[NSNumber numberWithFloat:0]];
        [rotate setToValue:[NSNumber numberWithFloat:M_PI]];
        [rotate setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
        [rotate setTimeOffset:(1 / (number_of_x_splits + number_of_y_splits)) * (x+y)];
        [rotate setFillMode:kCAFillModeForwards];
        [rotate setRemovedOnCompletion:NO];
        [transformLayer addAnimation:rotate forKey:@"transform.rotation.y"];

    }
}

. Проблема в том, что только последний CALayer в цепочке остается в конечной позиции. Я также попытался установить значение окончательного преобразования CALayer :

[transformLayer setTransform:CATransform3DMakeRotation(M_PI, 0, 1, 0)];

. Я предполагаю, что это связано с созданием другого экземпляра CALayer в цикле сброса свойств предыдущего слоя.

У кого-нибудь есть предложение, как исправить ситуацию?

6
задан leppie 24 July 2012 в 07:01
поделиться