你会如何实现[UIViewController presentModalViewController]?
问题描述:
我必须自定义2个不同的UIViewController之间的转换,为此我想重新实现[UIViewController presentModalViewController ...]。这个函数里面有什么?它是如何工作的?它有什么作用?你会如何实现[UIViewController presentModalViewController]?
非常感谢, 万斯
答
-[UIViewController presentModalViewController:animated:]
在幕后做了许多魔术。
对于我的应用程序Tweet注意我想通过在货架上从视图的背面动画新视图来呈现模态视图控制器。或多或少iBooks的功能。我试图覆盖默认的实现,但最终在一个多步骤的解决方案,它没有丑陋的黑客和警告工作:
- 实例化新的视图控制器。
- 将变换应用到新视图控制器的托管视图,以便它从其初始位置开始。¨
- 开始将视图动画化为未变换的“正常”位置。
- 等待动画完成,并作为一个单位:
- 从屏幕中删除您刚刚设置动画的视图。
- 致电
[self presentModalViewController:vc animated:NO]
。
最后一步很重要!过渡动画完成后,模式视图控制器将正常显示,但没有动画,并且对用户来说就像您进行了适当的动画演示一样。
解散与您的自定义过渡或多或少做相同的事情,但以相反的顺序。
+0
非常酷,但我会有点叫这个黑客。你必须在这里实例化你的视图控制器两次。如果在动画过程中某些关键数据发生变化,它看起来并不平坦。 – Moshe 2011-03-25 04:40:53
只有4或5个可用的:typedef枚举{ UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve, 的#if __IPHONE_OS_VERSION_MAX_ALLOWED> = __IPHONE_3_2 UIModalTransitionStylePartialCurl, #ENDIF } UIModalTransitionStyle; – vance 2011-01-14 16:47:08