【问题标题】:UINavigationController animation choppyUINavigationController 动画断断续续
【发布时间】:2014-03-01 02:12:59
【问题描述】:

在 iOS 7 中,如果呈现的视图控制器的视图的背景颜色是 [UIColor clearColor],则动画会变得非常不稳定/冻结一半。

我想知道这周围有没有?

【问题讨论】:

  • 你确定背景颜色是真正的原因吗?您是否尝试过只更改颜色并看到不同的结果?
  • @nhgrif 是的,你自己试试吧。推一个背景色设置为 clearColor 的视图控制器,你会看到。
  • @0xSina 我刚试过。它并不缓慢或波涛汹涌,但看起来很糟糕,推送视图位于顶部,而后视图立即消失。
  • @Can 是的,这就是我的意思。 Choppy 是错误的词。这很奇怪,这就是我的意思。
  • 我相信这是一个错误。检查我的答案。

标签: ios objective-c cocoa-touch uiviewcontroller


【解决方案1】:

这真的很有趣。不过,我认为它一点也不不稳定:那是导航控制器正在执行的实际动画,只是看起来不同,因为推送的视图控制器具有清晰的视图。

考虑两个处于类似情况的不透明视图控制器(为便于参考,将它们称为“A”和“B”)。给 A 一堆跨越视图整个宽度的内容——我在标签中使用了大部分字母。什么内容无关紧要,只要你能看到它并清楚地知道它在动画结束时已经走了多远。

现在按下 B。就在它覆盖整个屏幕之前,看看你仍然可以看到 A 的哪一部分内容。您应该会发现 A 的内容并不像您预期​​的那样几乎完全脱离屏幕;相反,它只是向左移动了一点。在我的字母测试中,我没有看到像“w”这样的迟到字母的尾端,而是看到了一点“g”。 A 只移动了六七个字母的值:

您的清晰推送视图也发生了同样的事情。底层的不透明视图会移动,但不会一直离开屏幕边缘;取而代之的是,它的移动刚好足以给观众带来运动的印象,然后就坐在那里直到过渡结束。之后,它可以从视图层次结构中移除(因为理论上它不再可见)并因此消失。

您可以通过使用 iOS 7 视图控制器转换 API 来规避这种行为。例如,请参阅 objc.io article about themWWDC session videos 了解更多信息。不过,您最终会重新实现整个幻灯片过渡,并且可能还需要自己做一些工作来支持滑动到返回手势。

【讨论】:

  • 感谢详细/彻底的回复!
【解决方案2】:

我也遇到过这个问题。我在以下位置通过自定义动画找到了修复:

https://gist.github.com/ArtFeel/7690431

【讨论】: