📅  最后修改于: 2023-12-03 15:07:49.775000             🧑  作者: Mango
在 Swift 5 中,我们可以通过 present
方法从一个视图控制器重定向到另一个视图控制器。而有时候,我们希望在重定向后制作一个全视图的视图控制器。
下面我们来介绍一下如何实现这个功能。
UIPresentationController
。class FullScreenPresentationController: UIPresentationController {
}
presentationTransitionWillBegin
方法,在方法中添加我们自己的全视图视图控制器。class FullScreenPresentationController: UIPresentationController {
override func presentationTransitionWillBegin() {
if let containerView = self.containerView {
// 创建自己的全视图视图控制器
let fullScreenVC = FullScreenViewController()
// 设置全视图视图控制器的frame和透明度
fullScreenVC.view.frame = containerView.bounds
fullScreenVC.view.alpha = 0.0
// 将全视图视图控制器添加到容器视图中
containerView.addSubview(fullScreenVC.view)
// 设置动画
let transitionCoordinator = presentingViewController.transitionCoordinator
transitionCoordinator?.animate(alongsideTransition: { _ in
fullScreenVC.view.alpha = 1.0
}, completion: { _ in
// 完成
})
}
}
}
在上面的代码中,我们创建了一个新的全视图视图控制器,并将其添加到了当前容器视图中。
该方法还设置了一个动画,在动画中我们将全视图视图控制器的透明度从 0.0 动画到了 1.0,从而实现了一个渐变的效果。
dismissalTransitionWillBegin
方法,在方法中制作动画,使得全视图视图控制器渐隐消失。class FullScreenPresentationController: UIPresentationController {
// presentationTransitionWillBegin 方法略
override func dismissalTransitionWillBegin() {
// 设置动画
let transitionCoordinator = presentingViewController.transitionCoordinator
transitionCoordinator?.animate(alongsideTransition: { _ in
self.presentedViewController.view.alpha = 0.0
}, completion: { _ in
// 完成
})
}
}
在上面的代码中,我们设置了一个动画,在动画中我们将全视图视图控制器的透明度从 1.0 动画到了 0.0,从而实现了一个渐隐消失的效果。
FullScreenPresentationController
设置为从另一个视图控制器重定向后的新视图控制器的 modalPresentationStyle
。let viewControllerToPresent = UIViewController() // 要重定向到的视图控制器
viewControllerToPresent.modalPresentationStyle = .custom
viewControllerToPresent.transitioningDelegate = self
在代码中,我们将 modalPresentationStyle
设置为 .custom
,并将转换代理(transitioningDelegate
)指定为 self
,这样,在重定向过程中,就会创建一个自定义的 FullScreenPresentationController
对象,从而实现了全视图的效果。
在 Swift 5 中,通过自定义 UIPresentationController
,我们可以从另一个视图控制器重定向后制作全视图的视图控制器。
具体步骤如下:
UIPresentationController
;presentationTransitionWillBegin
方法,创建一个全视图视图控制器,并添加到当前容器视图中;dismissalTransitionWillBegin
方法,设置全视图视图控制器的渐隐消失效果;modalPresentationStyle
。