ios - 使用自定义 "dismiss modal"类动画弹出 UIViewController

标签 ios swift uinavigationcontroller swift3 uistoryboardsegue

我正在尝试以模拟呈现/关闭 UIViewController 的方式自定义基于推送/弹出导航的 UINavigationController 的过渡动画。

这是标准动画的示例:

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

enter image description here

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

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

enter image description here

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

enter image description here

从前面的动画中您可以看出它与标准dismiss modal 动画的不同之处主要是泡泡糖屏幕不应从上到下滑动,但在播放期间应该已经出现在海军屏幕后面流行音乐。

这是我用来创建假关闭模态动画的代码:

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)
    }
}

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

最佳答案

尝试使用:

transition.type = kCATransitionReveal
transition.subtype = kCATransitionFromBottom

关于ios - 使用自定义 "dismiss modal"类动画弹出 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42023997/

相关文章:

swift - UnsafeMutableRawPointer(变量)有多安全

ios - IGListKit 从 Alamofire 请求向类插入数据

ios - 导航 Controller 和内存值

ios - 如何快速设置导航栏后箭头和backBarButtonItem标题具有不同的颜色

iphone - 当点击 backBarButtonItem 时,有没有办法阻止 UIViewController 从 UINavigationController 的堆栈中弹出?

ios - UITableView:新行添加到顶部

ios - 从 UINavigationController 向下动画化 UINavigationBar 的位置 - iOS

ios - Xcode 和 Swift。宽度是自动计算的,但在 iPhone Xr 上一切正常,在 iPhone X 上看起来很糟糕

swift - 如何使用 RxAlamofire 下载图像

ios - 无法使用优胜美地将Xcode 5.1更新为Xcode 5.1.1