Перемещение анимации CALayer? - PullRequest
1 голос
/ 28 августа 2011

У меня есть массив CALayers, которые я зацикливаю и пытаюсь переместить.

Tile является подклассом CALayer и имеет свойство CGRect с именем originalFrame, в котором я сохраняю кадр, к которому хочу анимировать.

Когда я использую приведенный ниже код, все мгновенно перемещается в правильное положение, и 4-секундная анимация отсутствует. Как я могу оживить эти CALayer?

       for (int i = 0; i < [tileArray count]; i++) {
            [UIView beginAnimations:nil context:NULL];
            [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
            [UIView setAnimationDelay:i];
            [UIView setAnimationDuration:4];
            Tile *currentCard = (Tile*)[tileArray objectAtIndex:i];
            currentCard.frame = currentCard.originalFrame;
            [UIView commitAnimations];
        }

1 Ответ

3 голосов
/ 28 августа 2011

У вас есть две проблемы: во-первых, вы пытаетесь анимировать frame слоя напрямую. Поскольку это производное свойство, вы не можете этого сделать. Вместо этого вы должны анимировать свойство position. http://developer.apple.com/library/mac/#qa/qa1620/_index.html

Во-вторых, вы используете +beginAnimations API UIView, но вы говорите, что ваши объекты Tile являются CALayers, а не UIViews. Так что вам не нужно использовать +beginAnimations. Вместо этого вам нужно использовать объект CAAnimation, например, CABasicAnimation (не проверено):

for (Tile *tile in tileArray)
{
    static NSString * const kProperty = @"position";

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:kProperty];
    animation.duration = 4.0f;
    animation.fromValue = [tile valueForKey:kProperty];
    animation.toValue = [NSValue valueWithCGRect:tile.originalFrame];
    [tile addAnimation:animation forKey:kProperty];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...