现在,是的,有数百个关于如何执行自定义segues的问题(和答案)。然而,我并没有夸大其词,所有这些答案都是错误的(我见过的都是50多个)!对不起,这可能听起来很苛刻,但事实是,建议的答案中没有一个给出与过渡中建立的苹果相同(正确)的结果(垂直封面等)。
更具体地说,这是预期的结果(用日志确认):
viewWillAppear
,在sourceVC上调用viewWillDisappear
并启动动画)。viewDidAppear
,在sourceVC上调用viewDidDisappear
。简而言之:调用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,使它看起来像是正确的方式,但与他们自己的方式相比结果不一致...所以我最好的猜测是苹果在引擎盖下这样做,并忘了提供足够的灵活性让客户执行相同的操作(换句话说是一个大缺陷),或者我只是在一次糟糕的旅行中看到一些不存在的问题......
答案 0 :(得分:2)
好吧,这可能不是如何为自定义segues(子类化UIStoryboardSegue)解决它的真正答案,但它确实解决了一般问题!
经过一些关于新功能的随意阅读后,我偶然发现了一种新的方法来在iOS7中引入的ViewControllers之间进行自定义转换,我想这就是“自定义转换”! 阅读here和here,或来自WWDC here的视频。
我刚刚舔了一下我的脚趾,但基本上它是一个新的,更接近系统的转换方式,并允许更好的控制=更好看的过渡。在浏览了the blog I referenced提供的示例(git found here)之后,我可以确认最终,我们能够执行过渡,这些转换在预期的情况下发生的事件表现为一个预期!/ p>
由于我只是在阅读它,我还不能给出详尽的解释,但请查看链接:)
注意:这可能不应该完全取代自定义segue,但可以以类似的方式使用(检查示例),所以如果你需要那些额外的花哨过渡,这绝对是它的外观!基本上你在故事板中设置segues,并在prepareForSegue:
- 方法中连接正确的过渡代表。