iPhone - 检测动画的结束

3

如何检测模态视图动画的结束(当我执行dismiss时)?(我在谈论的是不是由我自己创建的MFMailComposeViewController...)

谢谢

4个回答

5
您的模态视图控制器有一个 -viewDidDisappear: 方法,每当视图从屏幕上移除时都会自动调用。您可以在模态视图控制器中重写此方法以执行任何您想要的操作。
此外,您可能还希望考虑实现 -viewDidAppear: 方法,在您的模态视图消失后,显示您的视图控制器的视图。

我忘了说我的模态视图不是我创建的…它是一个 MFMailComposeViewController。 - Nate

1
您可以创建 MFMailComposeViewController 的子类,并重载其 -viewDidDisappear: 方法。
@interface MyCtrler : MFMailComposeViewController
@end
@implementation MyCtrler
-(void)viewDidDisappear:(BOOL)animated {
   [super viewDidDisappear:animated];
   // do anything you like
}
@end

我正在寻找一个在控制器被释放时调用的东西,而不是视图消失时调用的东西! - Nate

0

在关闭模态视图后,我需要执行某些操作,但只有在确保模态视图已经完全释放(dealloc-ed)之后才能执行。因此,对于我来说,viewDidDisappear及其在模态视图中的相关方法都太早了。

我发现最简单的方法是使用NSTimer延迟我的代码。当模态视图调用其委托并且委托调用删除模态视图时,它还会将要在模态视图消失时运行的代码排队。时间大约为300ms或400ms。(是否有一种方法可以从某个地方检索实际的时间?)


我忘了说我的模态视图不是由我创建的...它是一个MFMailComposeViewController。 - Nate

0
通常,要在动画完成时收到通知,您需要通过向 UIView 类发送 setAnimationDelegate: 来设置委托。
当使用 [someVC dismissModalViewControllerAnimated:YES] 解散 VC 时,无法设置动画委托。但是,如果您发送 NO 并自己动画 VC 的视图,则可以设置代理并在动画完成时收到通知。

这似乎对于模态视图来说太复杂了...我不想重新做动画! - Nate
1
@progrmr:+setAnimationDelegate:是一个类方法,而不是实例方法。 - kennytm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接