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)