UIView removeFromSuperView задержка анимации

У меня есть метод, который оживляет одно из подпредставлений UIWindow а затем удаляет его из UIWindow с помощью removeFromSuperview, Но когда я ставлю removeFromSuperview после блока анимации анимация не отображается, потому что removeFromSuperview удаляет UIView от UIWindow до воспроизведения анимации:-(Как я могу задержать removeFromSuperview так анимация сначала проигрывается, а потом подпредставление удаляется? Я старался [NSThread sleepForTimeInterval:1]; после анимационного блока, но это не имело желаемого эффекта, потому что анимация спит по какой-то причине.

Мой код для этого метода:

  - (void) animateAndRemove
    {
     NSObject *mainWindow = [[UIApplication sharedApplication] keyWindow];

     [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.8]; 
     UIView *theView = nil;
     for (UIView *currentView in [mainWindow subviews])
     {
      if (currentView.tag == 666)
      {
       currentView.backgroundColor = [UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:0.0];
       theView = currentView;
       }
     }
     [UIView setAnimationTransition:  UIViewAnimationTransitionNone forView:theView cache:YES];
      [UIView commitAnimations]; 



 //[NSThread sleepForTimeInterval:1];

 [theView removeFromSuperview];


    }

2 ответа

Решение

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

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelegate:theView];
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];
 ....

Это обеспечивает [theView removeFromSuperview] будет вызван после завершения анимации.

Если вы нацелены на iOS 4.0 и выше, вы можете использовать анимационные блоки:

[UIView animateWithDuration:0.2
     animations:^{view.alpha = 0.0;}
     completion:^(BOOL finished){ [view removeFromSuperview]; }];

(приведенный выше код взят из документации Apple по UIView)

Другие вопросы по тегам