Как создать многоэтапную анимацию UIImageView?

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

Кажется, работает только 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];
}

person cannyboy    schedule 15.06.2009    source источник


Ответы (2)


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

[UIView setAnimationDelegate:self];

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

person Kendall Helmstetter Gelner    schedule 15.06.2009
comment
благодаря. мне также пришлось использовать строку setAnimationDidStopSelector для: [UIView setAnimationDidStopSelector: @selector(secondAnim:finished:context:)]; - person cannyboy; 16.06.2009

Полное решение вашего вопроса:

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
}
person bentford    schedule 02.11.2009