【发布时间】:2014-02-14 04:33:35
【问题描述】:
现在,是的,有数百个关于如何执行自定义转场的问题(和答案)。但是,我并不夸张,所有这些答案都是错误的(我见过的都是 50+)!抱歉,这听起来可能很苛刻,但事实是,没有一个建议的答案给出与 Apple 内置转换(垂直覆盖等)相同(正确)的结果。
更具体地说,这是预期的结果(通过日志确认):
- Segue 开始(将视图添加到层次结构,在destinationVC 上调用
viewWillAppear,在sourceVC 上调用viewWillDisappear并开始动画)。 - 动画在整个持续时间内执行
- Segue 结束(动画完成,将 destinationVC 设置为当前 VC,无论是在堆栈上还是以模态方式呈现。在 destinationVC 上调用
viewDidAppear,在 sourceVC 上调用viewDidDisappear。
简而言之:invoke viewWillAppear/Disappear -> 动画过渡 -> 调用 viewDidAppear/Disappear
使用苹果内置的 segues,这是预期的行为,但不知何故,除了我之外,没有一个人对此有过问题。很多版本甚至先将目标视图添加为子视图,对其进行动画处理,然后再次将其删除并调用
[srcVC presentModalViewController:destVC animated:NO];
或
[srcVC.navigationController pushViewController:destVC animated:NO];
导致视图事件以各种随机顺序发送(与 CoreAnimations 相同的问题)。
在我的情况下,我真正想要的是“垂直封面”-转换恢复(从上到下),所有其他事件都按预期发送(如上所示)。
所以,我只是应该忍受各种丑陋的变通方法(在我需要时调用的硬编码方法中执行我的“任务”等),还是有一些隐藏的 正确的 以可重用的方式做到这一点?
有趣的事情:即使是苹果suggest that you do it the "wrong" way,它看起来像是正确的方式,但与他们自己的方式相比结果不一致……所以我最好的猜测是苹果在幕后做这件事,忘记为客户提供足够的灵活性执行相同的操作(换句话说就是大缺陷),或者我只是在一次糟糕的旅行中看到了一些不存在的问题......
【问题讨论】:
-
我希望有人对你的问题有更好的回答,但是当你提到苹果似乎建议你以“错误”的方式做这件事时,它提醒我这不是苹果第一次没有为开发人员提供直接模仿第一方行为的能力。想到的情况是,一些过渡动画在几年前被用于各种 Apple 应用程序,然后才允许第三方开发人员使用它们。
标签: ios cocoa-touch animation core-animation