【问题标题】:iPhone - Detect the end of the animationiPhone - 检测动画的结束
【发布时间】:2010-04-28 10:14:03
【问题描述】:

如何检测模态视图动画的结束(当我关闭时)? (我说的是不是我自己创建的 MFMailComposeViewController...)

谢谢

【问题讨论】:

    标签: iphone objective-c animation modal-view


    【解决方案1】:

    您的模态视图控制器有一个-viewDidDisappear: 方法,只要视图从屏幕上移除,就会自动调用该方法。你可以在你的模态视图控制器中重写这个方法来做任何你喜欢的事情。

    此外,您可能需要考虑在视图控制器中实现 -viewDidAppear: 方法,其视图会因您的模态视图消失而显示。

    【讨论】:

    • 我忘了说我的模态视图不是我创建的......它是一个 MFMailComposeViewController
    【解决方案2】:

    您可以继承 MFMailComposeViewController 并重载其 -viewDidDisappear:

    @interface MyCtrler : MFMailComposeViewController
    @end
    @implementation MyCtrler
    -(void)viewDidDisappear:(BOOL)animated {
       [super viewDidDisappear:animated];
       // do anything you like
    }
    @end
    

    【讨论】:

    • 我正在寻找在控制器被释放时调用的东西,而不是在视图消失时调用的东西!
    【解决方案3】:

    我需要在关闭模态视图后做一些事情,并且只有在确定模态视图真的消失(完全解除分配)时才需要做一些事情。所以 viewDidDisappear 和它在模态视图中的朋友对我来说太早了。

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

    【讨论】:

    • 我忘了说我的模态视图不是我创建的......它是一个 MFMailComposeViewController
    【解决方案4】:

    通常会在动画完成时收到通知,您可以通过向 UIView 类发送 setAnimationDelegate: 来设置委托。

    当使用[someVC dismissModalViewControllerAnimated:YES] 解散 VC 时,您无法设置动画委托,但如果您发送 NO 并制作您自己的 VC 视图动画,您可以设置委托并成为动画完成时通知。

    【讨论】:

    • 模态视图似乎太复杂了...我不想重做动画!
    • @progrmr: +setAnimationDelegate: 是类方法,而不是实例方法。
    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2016-10-20
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多