iOS: простая анимация - PullRequest
7 голосов
/ 17 июня 2011

Я хочу создать простую анимацию, меняющую альфа-значение:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2];
[view1 setAlpha:0.00];
[UIView commitAnimations];

Хорошо, таким образом я меняю альфа-значение на две секунды, и оно работает нормально, но я хочу вот что: Когда альфа равен 0, анимация должна начаться в другой раз, чтобы альфа = 1 Таким образом, анимация должна быть: альфа 0 -> альфа 1 -> альфа 0 -> альфа 1 -> ... и т. Д. С продолжительностью в две секунды. Вы можете мне помочь?

мой полный код

-(IBAction){
FirstViewController *firstViewController = [[[FirstViewController alloc] init]autorelease];
[firstViewController.label1 setAlpha:1.00];
[firstViewController.label2 setAlpha:1.00];
view = firstViewController.viewFirst; //this is my view and I copy in other view
[self fadeOut:nil finished:nil context:nil];}

- (void) fadeOut:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {


[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2];
[UIView  setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(fadeIn:finished:context:) ];
[view setAlpha:0.00];
[UIView commitAnimations];
}

- (void) fadeIn:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:2];
[UIView  setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(fadeOut:finished:context:) ];
[view setAlpha:1.00];
[UIView commitAnimations];
}

Ответы [ 5 ]

10 голосов
/ 17 июня 2011

В iOS 4 и более поздних версиях вы можете сделать

   view1.alpha = 1.0;
   [UIView animateWithDuration:2.0
                          delay:0.0
                        options:UIViewAnimationOptionRepeat|UIViewAnimationAutoReverse
                     animations:^{
                        view1.alpha = 0.0;
                     }
                     completion:nil
   ];
6 голосов
/ 17 июня 2011
- (void) fadeOut:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:2];
    [UIView  setAnimationDelegate:self];
    if(animationRunning){
        [UIView setAnimationDidStopSelector:@selector(fadeIn:finished:context:) ];
    }
    [view1 setAlpha:0.00];
    [UIView commitAnimations];
}

- (void) fadeIn:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:2];
    [UIView  setAnimationDelegate:self];
    if(animationRunning){
        [UIView setAnimationDidStopSelector:@selector(fadeOut:finished:context:) ];
    }
    [view1 setAlpha:1.00];
    [UIView commitAnimations];
}

Они будут вызывать друг друга в конце анимации ...

Все, что вам нужно сделать, чтобы начать бросать мяч, это позвонить:

[self fadeOut:nil finished:nil context:nil];
3 голосов
/ 17 июня 2011

Вы можете установить обработчик завершения анимации (используя блочный API или +(void)setAnimationDidStopSelector:(SEL)selector) и запустить следующий.

В качестве альтернативы взгляните на методы:

+ setAnimationRepeatCount:
+ setAnimationRepeatAutoreverses:
0 голосов
/ 01 июня 2013

Вы создаете ViewController, как показано ниже

FirstViewController *firstViewController = [[[FirstViewController alloc] init]autorelease];

И затем добавляете анимацию к нему, но когда вы добавили firstViewController.view в иерархии представления (addSubview).Также просто вызов

[[[FirstViewController alloc] init]autorelease]

не создаст объект метки, если вы не переопределите его метод init.Попробуйте отладку, если метка размещена в этот момент времени.Также для анимации я использую анимацию uiview с методом завершения блока

0 голосов
/ 17 июня 2011

Я думаю, вы можете использовать только одну функцию (на основе функций предыдущего ответа):

- (void) fadeIn:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:2];
    [UIView  setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(fadeIn:finished:context:) ];
    [view1 setAlpha:mod(1-view1.alpha)];
    [UIView commitAnimations];
}

Альфа не должна быть отрицательным значением, поэтому должен применяться мод

...