Pop UIViewController具有自定义“消除模态”的动画

时间:2017-02-03 12:10:08

标签: ios swift uinavigationcontroller swift3 uistoryboardsegue

我正在尝试以模拟提示/解散UINavigationController的方式自定义UIViewController基于推送/弹出导航的过渡动画。

以下是标准动画的示例:

  • 推送到绿屏,
  • 呈现模态橙色屏幕,
  • 取消模态橙色屏幕和
  • 弹出回到青色屏幕。

enter image description here

我能够获得相同的“从底部向上滑动”推动动画,实现自定义垂直UIStoryboardSegue

困难的部分是实现对应的流行动画。 我能得到的最好的是:

enter image description here

这是同样效果的慢动作版本:

enter image description here

从上一个动画中你可以理解它与标准的消除模态动画不同,主要是因为泡泡糖屏幕不应该从上到下滑动,但应该已经存在于海军画面后面流行音乐。

这是我用来创建虚假解雇模态动画的代码:

class FakeModalNavigationController: UINavigationController {

    fileprivate static let unwindToBubblegumScreenSegueID = "unwindToBubblegumScreenSegueID"

    override func unwind(for unwindSegue: UIStoryboardSegue, towardsViewController subsequentVC: UIViewController) {
        if unwindSegue.identifier == type(of: self).unwindToBubblegumScreenSegueID {
            popViewControllerAnimatedFromBottom(subsequentVC)
        }
    }

    fileprivate func popViewControllerAnimatedFromBottom(_ viewControllerToPop: UIViewController) {
        let transition = CATransition()
        transition.duration = 0.25
        transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        transition.type = kCATransitionPush
        transition.subtype = kCATransitionFromBottom
        view.layer.add(transition, forKey: nil)
        popViewController(animated: false)
    }
}

提前感谢您的回答和评论!

1 个答案:

答案 0 :(得分:2)

尝试使用:

transition.type = kCATransitionReveal
transition.subtype = kCATransitionFromBottom