我有一个方法,可以对 UIWindow
的一个 subview 进行动画处理,然后使用 removeFromSuperview
将其从 UIWindow
中删除。但是当我将 removeFromSuperview
放在动画 block 之后时,动画永远不会显示,因为 removeFromSuperview
之前从 UIWindow
中删除了 UIView
动画播放:-( 如何延迟 removeFromSuperview
以便先播放动画,然后删除 subview ?我在动画 block 之后尝试了 [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];
}
最佳答案
您应该在动画 block 中使用委托(delegate)机制来决定动画结束时要执行的操作。对于您的情况,请使用
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelegate:theView];
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];
....
这可以确保在动画完成后调用[theView removeFromSuperview]
。
关于iphone - UIView removeFromSuperView 动画延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2653139/