自定义 UIViewController 过渡动画适用于演示,但不适用于解雇
Posted
技术标签:
【中文标题】自定义 UIViewController 过渡动画适用于演示,但不适用于解雇【英文标题】:Custom UIViewController transition animation works on presentation but not on dismissal 【发布时间】:2018-04-18 20:34:19 【问题描述】:我有UINavigationController A
,它是UISplitViewController
的“左侧”视图控制器,我在UINavigationController A
上以模态方式呈现UINavigationController B
。此模态演示使用情节提要转场执行,并在 Interface Builder 中设置了以下属性:Kind
= Present Modally
, Presentation
= Over Current Context
, Transition
= Default
, Animates
= true
在UINavigationController A
的根视图控制器中,我有以下属性:
let themesTransitionDelegate = ThemesTransitionDelegate()
以及prepareForSegue方法的如下实现:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
segue.destination.transitioningDelegate = themesTransitionDelegate
segue.destination.view.frame = view.bounds
ThemesTransitionDelegate
的实现如下:
class ThemesTransitionDelegate: NSObject, UIViewControllerTransitioningDelegate
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning?
return ThemesTransitionAnimator()
func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning?
// THIS IS NEVER CALLED!
return ThemesTransitionAnimatorDismiss()
我的自定义动画在呈现模态时工作正常,但从未调用 animationController(forDismissed dismissed: UIViewController)
并且未使用我的自定义解除动画 - 而是使用标准模态解除动画。
我正在使用从UINavigationController B
的根视图控制器调用的dismiss(animated: true, completion: nil)
来触发所呈现模式的解除。我已经确认 UINavigationController B
的 transitioningDelegate
在触发解雇时不为零。
这里可能出了什么问题?
【问题讨论】:
【参考方案1】:您在情节提要中设置了错误的modalPresentationStyle
。使用UIModalPresentationCustom
:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
segue.destination.modalPresentationStyle = .custom //Custom presentation
segue.destination.transitioningDelegate = themesTransitionDelegate
segue.destination.view.frame = view.bounds
【讨论】:
宾果游戏。谢谢!知道为什么演示文稿有效但在这种情况下解雇没有?我的直觉是期望它们两者都起作用,或者两者都不起作用以上是关于自定义 UIViewController 过渡动画适用于演示,但不适用于解雇的主要内容,如果未能解决你的问题,请参考以下文章
UIViewController 动画过渡在 iOS8 中失败
如何在将 UIViewController 呈现给自定义时更改默认转换