我有一种方法可以为UIWindow
的其中一个子视图设置动画,然后使用UIWindow
将其从removeFromSuperview
中移除。但是当我在动画块之后放置removeFromSuperview
时,动画永远不会显示,因为removeFromSuperview
在动画播放之前从UIView
移除了UIWindow
:-(我怎么能延迟{{ 1}}所以首先播放动画,然后删除子视图?我在动画块之后尝试了removeFromSuperview
但没有达到预期的效果,因为动画因某种原因也会睡觉。
此方法的代码:
[NSThread sleepForTimeInterval:1];
答案 0 :(得分:16)
您应该使用动画块中的委托机制来决定动画结束时要执行的操作。对于您的情况,请使用
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelegate:theView];
[UIView setAnimationDidStopSelector:@selector(removeFromSuperview)];
....
这可确保在动画完成后调用[theView removeFromSuperview]
。
答案 1 :(得分:7)
如果您向上定向iOS 4.0,则可以使用动画块:
[UIView animateWithDuration:0.2
animations:^{view.alpha = 0.0;}
completion:^(BOOL finished){ [view removeFromSuperview]; }];
(上面的代码来自Apple的UIView文档)