3

我注意到iOS 5引入了额外的参数和方法来检测视图控制器的演示动画何时完成。presentModalViewController检测动画完成

有没有办法在较早的版本,如iOS 4.x做到这一点?

我已经使用presentModalViewController来呈现控制器,我注意到你不能调用dismiss方法,除非动画已经完成。

那么我该如何检测动画何时完成,然后才能解除它?

+1

出于好奇,价值是什么样的呈现,然后立即驳回模态视图控制器? – CodaFi 2012-03-18 05:10:21

+0

噢...我提出了一个请稍候屏幕,并执行一些可能需要一分钟左右的网络请求。如果连接出现错误,有时会在动画完成之前检测到它。如果我解雇它,那么它似乎忽略了这个命令。 – blissweb 2012-03-18 15:09:55

+0

如果您只想向他们展示您在长时间运行的流程完成时正在做些什么,例如从Web上获取一些数据,请尝试使用['SVprogressHUD'](https://github.com/samvermette/SVProgressHUD) 。它将禁用界面并显示一个'UIActivityIndi​​cator'。 – 2012-03-18 22:19:56

回答

1

我只是试图解雇一个模态提出的VC,在viewDidLoad,viewWillAppear和viewDidAppear。前两名没有骰子,但解雇工作在视图中出现。 (在动画完成后会调用这种方法是有道理的)。

而且,您可能已经知道这一点,但如果您不这样做:您不必从提交它的VC中解除模态提供的VC。您的“等待网络”VC可以检查viewDidAppear中的连接状态,并在连接完成时关闭自身。

+0

太棒了...谢谢你。希望它能帮助更多的人。我会尽量在稍后用我的编码解决方案更新这篇文章。 – blissweb 2012-03-19 12:47:01

0

没有确切的方法可以做到这一点 - 您可以期待的最好方法是使用呈现视图控制器中的viewDidDisappear:。请确保使用布尔实例变量来确定您是否正在消失,因为模态视图控制器正在呈现或其他原因。老实说,如果你正在构建新的软件,我坚决鼓励你将iOS 5和更高版本作为目标。绝大多数人已经升级,其余的将在几个月内;没有理由为新项目支持iOS 4。

+0

谢谢。我会试一试。我想我也可以在模态加载后发回消息。任何想法“viewWillAppear”和“viewDidLoad”块或哪些其他只会在动画完成后触发*的内容? – blissweb 2012-03-19 03:47:22

+0

这是一个非常好的问题 - 苹果关于[View Controller Life Cycle]的文档(https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html#//apple_ref/doc/uid/TP40007457-CH10-SW1)非常全面。我建议阅读表4-1以了解放入哪种方法的逻辑。如果您使用xib而不是故事板,那很好,本指南仍然适用。 – 2012-03-19 12:38:32

0

它只是说“等,而我做网络请求”?也许你可以使用一个视图(全尺寸连接到keyWindow)而不是整个视图控制器。启动网络请求的vc可以呈现视图并将其与任何您喜欢的动画一起移除。我有一个班级可以做到这一点。让我知道如果你想尝试,我会粘贴它。

+0

我应该提到,它是OS5代码,所以你必须添加手动垃圾收集。 – danh 2012-03-18 22:32:55

+0

是的,我同意这是一个好的解决方法,只是更多的工作和代码,只是想知道是否有答案的具体问题,我的和其他人受益。谢谢。 – blissweb 2012-03-19 03:50:08