2009-06-15 3 views
3

Я пытаюсь сделать многоступенчатую анимацию, так что UIImageView (1) исчезает, (2) перемещается, (3) сдвигается с экрана.Как создать многоэтапную анимацию UIImageView?

Выполняется только этап 1. Что я делаю не так? Вот код:

// FIRST PART - FADE IN 
-(void)firstAnim 
{ 
    // 'sprite' is a UIImageView 
    [sprite setAlpha:0.1f]; 
    [UIView beginAnimations:@"anim1" context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:0.25]; 
    [UIView setAnimationDidStopSelector:@selector(secondAnim)]; 
    [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
    [sprite setAlpha:1.0f]; 
    [UIView commitAnimations]; 
} 


// SECOND PART - MOVE 
-(void)secondAnim 
{ 
    [UIView beginAnimations:@"anim2" context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationDidStopSelector:@selector(thirdAnim)]; 
    [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
    sprite.frame = CGRectMake(170, 184, 20, 20); 
    [UIView commitAnimations]; 
} 

// THIRD PART - SLIDE OFF SCREEN 
-(void)thirdAnim 
{ 
    [UIView beginAnimations:@"anim3" context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    sprite.frame = CGRectMake(170, 420, 20, 20); 
    [UIView commitAnimations]; 
} 

ответ

4

Вам нужно добавить вызов, чтобы установить себя в качестве анимации делегата:

[UIView setAnimationDelegate:self]; 

Было бы неплохо, чтобы сбросить себя в качестве делегата (набор к нулю) в последний блок анимации.

+0

спасибо. Я также должен был использовать строку setAnimationDidStopSelector для: [UIView setAnimationDidStopSelector: @selector (secondAnim: finished: context :)); – cannyboy

4

Комплексное решение на ваш вопрос:

1) установить анимацию делегата

2) использовать нужный переключатель и сигнатурный метод

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:.5]; 
[UIView setAnimationDelegate:self]; //set delegate! 
[UIView setAnimationDidStopSelector: 
    @selector(secondAnim:finished:context:)]; 


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

    //animation #2 
} 
Смежные вопросы