1

我一直在努力实现一个自定义模态转换,它使用UIPresentationController子类在演示和关闭期间创建和操作附加视图。Apple 在文档中提供了一个如何执行此操作的示例,但我遇到了障碍。

呈现模态时,我的自定义视图动画效果很好,但是当我关闭模态时,应用到自定义视图dismissalTransitionWillBegin的动画与我从animationControllerForDismissedController:. 具体来说,自定义视图的动画忽略了过渡动画的持续时间,并且总是非常快速地播放(持续时间似乎在 0.2 秒左右)。

什么可能导致animateAlongsideTransition:completion:忽略基本动画的持续时间?

4

1 回答 1

2

问题的根源似乎是 iOS 中的一个错误。

无论我如何重构或简化我的动画代码,我总是得到相同的结果,所以我开始怀疑我的项目设置方式是否可能导致问题。我将自定义模态转换代码放入一个干净的项目中,你瞧,它在第一次尝试时就完美运行。

一点一点地,我定制了我的测试应用程序以更接近我的真实应用程序,我最终能够让问题再次出现。通过反复试验,我发现了引发问题的因素组合:

  1. 呈现视图控制器位于UINavigationController
  2. 呈现视图控制器的条形按钮项目包括一个基于图像的UIBarButtonItem
  3. 窗口有一个色调颜色集

当满足这三个条件时,调用的动画块将在animateAlongsideTransition:调用的dismissalTransitionWillBegin动画块之前执行。这似乎阻止了自定义视图的动画获得过渡动画的持续时间。在我的测试中,动画以 0.215 秒的持续时间运行,我认为这是默认持续时间。animateWithDuration:animateTransitionanimateAlongsideTransition:

除了删除触发它的三个因素之一之外,我无法找到任何方法来阻止问题的发生。我最终确定的解决方法是删除窗口的色调颜色,而是使用UIView的外观代理设置全局色调颜色。有一些副作用——比如UIAlertViews' 按钮被染色——但就我的目的而言,这是一个可以接受的折衷方案。

于 2015-09-07T18:09:39.470 回答