目前,我有一个 View Controller 呈现其他 View Controller 。我想做的是重新创建推送 View Controller 时使用的默认动画。
我目前的方法是:
FirstViewController
:
@IBAction private func push(sender: AnyObject) {
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SecondViewController")
let transition = CATransition()
transition.duration = 0.5
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromRight
view.window?.layer.addAnimation(transition, forKey: kCATransition)
presentViewController(vc, animated: false, completion: nil)
}
SecondViewController
:
@IBAction private func pop(sender: AnyObject) {
let transition = CATransition()
transition.duration = 0.5
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition.type = kCATransitionPush
transition.subtype = kCATransitionFromLeft
view.window?.layer.addAnimation(transition, forKey: kCATransition)
dismissViewControllerAnimated(false, completion: nil)
}
它几乎可以工作,但是我有一个奇怪的行为,在 View Controller 之间转换时我遇到了一种黑屏/闪烁。我已经尝试更改 window.backgroundColor
但它没有解决问题。
提前致谢0_0...
最佳答案
问题只是在于您所做的不是如何自定义当前/关闭过渡的动画。苹果已经为你提供了一个清晰的、完善的、官方的方式来做到这一点,而你所做的并不是它。您需要为呈现的 View Controller 提供一个 transitioningDelegate
以及 animationControllerForPresentedController:
和 animationControllerForDismissedController:
的实现,并实现 UIViewControllerAnimatedTransitioning 协议(protocol),可能还包括自定义 UIPresentationController 子类。
关于iOS 呈现 View Controller 动画为 'Push'(左右动画),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42401430/