Разделение анимации в iOS - PullRequest
1 голос
/ 19 февраля 2012

Я получил приложение с простым UIView. На этом UIview.

имеется матрица NxN UIImageViews.

Я хочу включить каждый UIImageView. Но один за другим. Я попробовал этот код:

for (int k=0; k<kol; k++)
        for (int l=0; l<kol; l++)
        {
            [UIView beginAnimations:nil context:NULL];
            [UIView setAnimationDuration:0.3];
                int posTo = pole[k][l].position ;
                pole[k][l].position++;
                if (posTo == 4) {posTo=0; pole[k][l].position=1;}
                pole[k][l].imageView.transform = CGAffineTransformMakeRotation(1.57079633*posTo);
            [UIView commitAnimations];
        }

Но все изображения вращаются одновременно.

Как мне отделить эту анимацию?

UPD

Сейчас я использую этот код для более сложной анимации:

-(void) turnAllPole
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    [UIView setAnimationDelay:delay];
    for (int k=0; k<kol; k++)
        for (int l=0; l<kol; l++)
        {
            if (poleBeforeTurn[k][l] == 1)
            {
                int posTo = pole[k][l].position ;
                pole[k][l].position++;
                if (posTo == 4) {posTo=0; pole[k][l].position=1;}
                pole[k][l].imageView.transform = CGAffineTransformMakeRotation(1.57079633*posTo);
           }    
        }
    [UIView commitAnimations];
    delay += 0.3;
}

для синхронного вращения некоторых частей матрицы (где poleBeforeTurn[k][l] == 1). Но этот код сначала вращает все части за один раз (например, если я использую только в циклах pole[k][l].imageView.transform = CGAffineTransformMakeRotation(1.57079633*posTo); без анимации), а после этого реализую анимацию.

Как мне избежать первого поворота и реализовать только анимацию?

Ответы [ 3 ]

2 голосов
/ 19 февраля 2012

Попробуйте установить задержку для каждой анимации UIImageView:

[UIView setAnimationDelay:delay];

Если вы увеличиваете длительность задержки после каждого цикла, вы должны получить желаемый эффект.

2 голосов
/ 19 февраля 2012

первый параметр beginAnimations:context: является анимацией. Вы можете использовать его для группировки (или в вашем случае разгруппирования) анимации.

Попробуйте использовать разные animationID для каждого из ваших объектов

float delay = 0;
for (int k=0; k<kol; k++)
    for (int l=0; l<kol; l++)
    {
        [UIView beginAnimations:[NSString stringWithFormat:@"anim_%d_d", k, l] context:NULL];
        [UIView setAnimationDelay:delay];
        /* animate */
        delay += 0.05;
    }
}
0 голосов
/ 19 февраля 2012

Попробуйте NSTimer https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/Reference/NSTimer.html#//apple_ref/doc/uid/TP40003747

Напишите метод для анимации ячейки (координаты ячейки будут параметрами) и установите таймер между различными вызовами

...