gpt4 book ai didi

ios - 创建自定义 Segue 的正确方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:15 34 4
gpt4 key购买 nike

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

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

  1. Segue 开始(将 View 添加到层​​次结构,在 destinationVC 上调用 viewWillAppear 并在 sourceVC 上调用 viewWillDisappear 并开始动画)。
  2. 动画在整个持续时间内执行
  3. Segue 结束(动画完成,将 destinationVC 设置为当前 VC,在堆栈上或模态呈现。在 destinationVC 上调用 viewDidAppear 并在 sourceVC 上调用 viewDidDisappear)。<

简而言之:调用 viewWillAppear/Disappear -> 动画转换 -> 调用 viewDidAppear/Disappear

使用 apples 内置的 segues,这是预期的行为,但不知何故,除了我之外没有一个人对此有疑问。许多版本甚至首先将目标 View 添加为 subview ,对其进行动画处理,然后再次将其删除并调用

[srcVC presentModalViewController:destVC animated:NO];

[srcVC.navigationController pushViewController:destVC animated:NO];

导致 View 事件以各种随机顺序发送(与 CoreAnimations 相同的问题)。

在我的例子中,我真正想要的是“垂直覆盖”- 转换恢复(从上到下),所有其他事件都按预期发送(如上所示)。

所以,我是应该忍受各种丑陋的解决方法(在我需要时调用的硬编码方法中执行我的“任务”等等),还是有一些隐藏的适当的 以可重用的方式执行此操作的方法?

有趣的是:即使是苹果suggest that you do it the "wrong" way ,让它看起来像是正确的方式,但与他们自己的方式相比结果不一致......所以我最好的猜测是苹果在幕后这样做,忘记为客户提供足够的灵 active 来执行相同的操作(换句话说,这是一个大缺陷), 或者我只是在一些糟糕的旅行中看到了一些不存在的问题......

最佳答案

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

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

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

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

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

关于ios - 创建自定义 Segue 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21311374/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com