如何在不使用 presentViewController 的情况下以模态方式呈现自定义视图?

Posted

技术标签:

【中文标题】如何在不使用 presentViewController 的情况下以模态方式呈现自定义视图?【英文标题】:How can I present a custom view modally without using presentViewController? 【发布时间】:2015-05-19 08:27:38 【问题描述】:

是否可以使用addChildViewController 以模态方式呈现视图控制器?我想以模态方式呈现UIviewcontroller's 视图,以便它与窗口层次结构下的任何视图重叠。我想在不使用self.presentViewcontroller 的情况下做到这一点,因为我想构建我自己的动画,而不是使用预设的向上/向下翻转/等。我尝试使用self.addChildViewcontroller(modal)self.view.addSubView(modal.view) 但是它进入我的ChildViewController。当我使用self.view.window?.addSubview 时,应用程序崩溃了。

是否可以使用addChildController 以模态方式呈现 UIViewcontroller?

我包含了我的示例代码。

https://github.com/cuongta/testcode

override func viewDidLoad() 
   super.viewDidLoad()

   var childVC = ChildViewController()
   var navVC = UINavigationController()
   navVC.viewControllers = [childVC]
   self.addChildViewController(navVC)
   self.view.addSubview(navVC.view)

【问题讨论】:

您能在此处发布崩溃代码 sn-p 并查明错误消息吗?帮助您而不是从某个地方下载项目会更容易 你可以使用 UIViewControllerAnimatedTransitioning,UIViewControllerTransitioningDelegate 类来制作你自己的自定义动画并使用 presentViewcontroller 你也可以检查一下:github.com/nferocious76/TestModal 我没有使用苹果提供的默认演示调用,只是一个简单的动画。 【参考方案1】:

您应该使用UIViewControllerAnimatedTransitioningUIViewControllerTransitioningDelegate 来实现您想要的。

我认为这是 Apple 的最佳方式。

在对象中采用 UIViewControllerAnimatedTransitioning 协议 实现自定义视图控制器转换的动画。

这个协议中的方法让你定义一个动画对象,它 创建用于打开或关闭视图控制器的动画 在固定的时间内屏幕。您使用此创建的动画 协议不能是交互式的。要创建交互式过渡, 你必须将你的动画对象与另一个对象结合起来 控制动画的时间。

您可以下载Apple 示例代码 here

【讨论】:

以上是关于如何在不使用 presentViewController 的情况下以模态方式呈现自定义视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在封面视图和主页中使用“presentViewController”

如何使用 presentViewController 呈现 iOS 键盘扩展

如何更改presentViewController过渡动画

如何使用委托给 self 调用 presentViewController?

将 presentViewController 与 UITabbarController 一起使用时如何传递数据

如何在 iOS SDK 中使用 presentViewController 在视图控制器之间传递变量?