UIView removeFromSuperView动画延迟

时间:2010-04-16 13:10:17

标签: iphone animation uiview commitanimations

我有一种方法可以为UIWindow的其中一个子视图设置动画,然后使用UIWindow将其从removeFromSuperview中移除。但是当我在动画块之后放置removeFromSuperview时,动画永远不会显示,因为removeFromSuperview在动画播放之前从UIView移除了UIWindow :-(我怎么能延迟{{ 1}}所以首先播放动画,然后删除子视图?我在动画块之后尝试了removeFromSuperview但没有达到预期的效果,因为动画因某种原因也会睡觉。

此方法的代码:

[NSThread sleepForTimeInterval:1];

2 个答案:

答案 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文档)