【问题标题】:PROPER way of creating Custom Segue创建自定义 Segue 的正确方法
【发布时间】:2014-02-14 04:33:35
【问题描述】:

现在,是的,有数百个关于如何执行自定义转场的问题(和答案)。但是,我并不夸张,所有这些答案都是错误的(我见过的都是 50+)!抱歉,这听起来可能很苛刻,但事实是,没有一个建议的答案给出与 Apple 内置转换(垂直覆盖等)相同(正确)的结果。

更具体地说,这是预期的结果(通过日志确认):

  1. Segue 开始(将视图添加到层​​次结构,在destinationVC 上调用viewWillAppear,在sourceVC 上调用viewWillDisappear 并开始动画)。
  2. 动画在整个持续时间内执行
  3. 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


【解决方案1】:

好的,这可能不是如何解决自定义 segue(子类化 UIStoryboardSegue)的真正答案,但它确实解决了一般问题!

在阅读了一些关于新功能的随意阅读之后,我偶然发现了一种在 iOS7 中引入的 ViewControllers 之间进行自定义转换的新方法,我猜它只不过是“自定义转换”! 阅读 herehere,或来自 WWDC 的视频 here

我刚刚试了一下,但基本上它是一种新的、更接近系统的过渡方式,并且允许更好的控制 = 更好看的过渡。在浏览了the blog I referenced 提供的示例(git 找到here)后,我可以确认,最后,我们能够进行转换,其行为类似于 ONE EXPECTS TO 与在预期场合触发的事件!

因为我只是在阅读它,所以我还不能给出详尽的解释,但请查看链接:)

注意:这可能不应该完全取代自定义转场,但可以以类似的方式使用(检查示例)所以如果你需要一点额外的花哨过渡,这绝对是它的外观方式!基本上,您在情节提要中设置转场,并在 prepareForSegue:-method 中连接正确的转换委托。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2021-12-11
    • 2013-12-18
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多