现在,是的,关于如何执行自定义搜索有数百个问题(和答案)。但是,我毫不夸张地说,所有这些答案都是错误的(我见过全部50个以上)!抱歉,这听起来可能很刺耳,但事实是,建议的答案都没有给出与内置转换中的Apple(垂直覆盖等)相同(正确)的结果。
更具体地说,这是预期的结果(已通过日志确认):
viewWillAppear
在destinationVC和viewWillDisappear
sourceVC上调用并开始动画)。viewDidAppear
destinationVC和viewDidDisappear
sourceVC上调用)。简而言之:invoke- viewWillAppear/Disappear
>动画过渡-> invokeviewDidAppear/Disappear
使用苹果内置的segues,这是预期的行为,但是除了我以外,没有一个人有这个问题。许多版本甚至先将目标视图添加为子视图,然后对其进行动画处理,然后再次将其删除并调用
[srcVC presentModalViewController:destVC animated:NO];
或者
[srcVC.navigationController pushViewController:destVC animated:NO];
导致视图事件以各种随机顺序发送(与CoreAnimations相同)。
就我而言,我真正想要的只是“垂直覆盖”转换(从上到下),所有其他事件均按预期发送(如上所示)。
因此,我是否应该忍受各种丑陋的变通办法(在需要时以调用的硬编码方法来执行我的“任务”等),或者是否存在某种可重用的隐藏正确方法?
有趣的事情:甚至苹果公司都建议您以“错误”的方式进行操作,使其看起来像是正确的方法,但与他们自己的方法相比却产生不一致的结果……所以我最好的猜测是苹果在幕后这样做,却忘记了付出足够的灵活性让客户执行相同的操作(换句话说,就是很大的缺陷),或者我正经历一段艰难的旅程,看到一些不存在的问题……
好的,这可能不是解决自定义问题(UIStoryboardSegue的子类)的真实答案,但是它确实解决了一般问题!
在对新功能进行了一些随意的阅读之后,我偶然发现了一种新的方法,可以在iOS7中引入的ViewController之间进行自定义转换,我想这就是“自定义转换”!阅读关于它在这里和这里,或视频WWDC这里。
我只是蘸了一下脚趾,但从根本上讲,它是一种新的,更接近系统的过渡方式,并允许更好的控制=外观更好的过渡。看完我所引用的博客提供的示例(在此处找到git ),我可以确认这一点,我们能够完成在预期情况下触发的事件的转换,将其作为一个“预期”!
由于我只是在阅读有关内容,因此我无法提供详尽的解释,但请查看链接:)
注意:这可能不应该完全取代自定义序列,但是可以类似的方式使用(请参见示例),因此,如果您需要一点额外的花哨过渡,那么这绝对是您的理想选择!基本上,您可以在情节提要中设置segues,并在prepareForSegue:
-method中连接正确的过渡代理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句