IOS анимация по одному - PullRequest
       3

IOS анимация по одному

0 голосов
/ 06 февраля 2012

У меня есть несколько просмотров, и я хочу отображать их один за другим.Я не могу найти, как это сделать.Вместо этого, если я использую следующий код, все представления появляются сразу.

NSTimer *timer1 = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(showStar2) userInfo:nil repeats:NO];
        NSTimer *timer2 = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(showStar3) userInfo:nil repeats:NO];
        NSTimer *timer3 = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(showStar4) userInfo:nil repeats:NO];
        NSTimer *timer4 = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(showStar5) userInfo:nil repeats:NO];

        [timer1 fire];
        [timer2 fire];
        [timer3 fire];
        [timer4 fire];


-(void)showStar2
{

    [UIView beginAnimations:@"anim1" context:NULL];
    [UIView setAnimationDuration:0.5];
    [stars[1] setAlpha:1];
    [UIView commitAnimations];
}

Все функции showStar идентичны, за исключением строк

[UIView beginAnimations:@"anim1" context:NULL];
[stars[1] setAlpha:1];

, которые имеют разные аргументы.stars - это массив UIImageView.Любое предложение приветствуется.

Ответы [ 4 ]

1 голос
/ 06 февраля 2012

Все ваши таймеры используют одинаковую задержку, поэтому все они отображаются одновременно.Кроме того, не вызывайте огонь на таймеры, они стреляют автоматически.Вызов огня, вероятно, заставляет их немедленно стрелять.

Кстати, вам не нужно использовать таймеры для запуска анимации, вы можете просто добавить это к вашей анимации:

[UIView setAnimationDelay:x];

разные x для каждого вида.

1 голос
/ 06 февраля 2012

На самом деле вы запускаете все таймеры ровно через 2 секунды. Измените timeInterval для разных таймеров.

Вместо этого вы можете использовать один NSTimer, который будет срабатывать несколько раз.

Объявление NSUInteger count; в файле .h.

Запустите NSTimer следующим образом:

[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(showStar:) userInfo:nil repeats:YES];

И ваш showStar метод должен быть следующим:

-(void)showStar:(NSTimer*)timer
{
    if( count > 0 )
    {
        [stars[count-1] setAlpha:0];
    }
    [UIView beginAnimations:@"anim1" context:NULL];
    [UIView setAnimationDuration:0.5];
    [stars[count] setAlpha:1];
    [UIView commitAnimations];

    count++;

    if( count == 4 )
    {
        [timer invalidate];
        count = 0;
    }
}

Добавлен следующий код.

if( count > 0 )
{
    [stars[count-1] setAlpha:0];
}
0 голосов
/ 06 февраля 2012

На мой взгляд, ваша реализация неверна.

Лучше разместить UImageView на вашем UIView. Затем создайте NSArray изображений и загрузите их на imageView.

arrAnimations = [[NSArray alloc] initWithObjects:[UIImage imageNamed:@"image1.png],.....nil];

, затем позвоните

imageView.animationImages= arrAnimations;
imageView.animationDuration=2;
[imageView startAnimating];
0 голосов
/ 06 февраля 2012

Я бы сделал что-то вроде этого

- (void)firstAnimation{

    [UIView animateWithDuration:2.0f animations:^{
        //first animation
    } completion:^(BOOL finished){
        [self secondAnimation];
    }];

}

, вероятно, с рекурсией, а флаг для текущей анимации будет чище, хотя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...