📌  相关文章
📜  在 swift 5 中从另一个视图控制器重定向后,制作全视图视图控制器 - Swift (1)

📅  最后修改于: 2023-12-03 15:07:49.775000             🧑  作者: Mango

在 Swift 5 中从另一个视图控制器重定向后制作全视图视图控制器

在 Swift 5 中,我们可以通过 present 方法从一个视图控制器重定向到另一个视图控制器。而有时候,我们希望在重定向后制作一个全视图的视图控制器。

下面我们来介绍一下如何实现这个功能。

具体步骤
  1. 首先,我们需要创建一个新的类,这个类需要继承自 UIPresentationController
class FullScreenPresentationController: UIPresentationController {
  
}
  1. 然后,我们需要重写这个类的 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,从而实现了一个渐变的效果。

  1. 接下来,我们需要重写 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,从而实现了一个渐隐消失的效果。

  1. 最后,我们只需将 FullScreenPresentationController 设置为从另一个视图控制器重定向后的新视图控制器的 modalPresentationStyle
let viewControllerToPresent = UIViewController() // 要重定向到的视图控制器
viewControllerToPresent.modalPresentationStyle = .custom
viewControllerToPresent.transitioningDelegate = self

在代码中,我们将 modalPresentationStyle 设置为 .custom,并将转换代理(transitioningDelegate)指定为 self,这样,在重定向过程中,就会创建一个自定义的 FullScreenPresentationController 对象,从而实现了全视图的效果。

总结

在 Swift 5 中,通过自定义 UIPresentationController,我们可以从另一个视图控制器重定向后制作全视图的视图控制器。

具体步骤如下:

  1. 创建一个新的类,继承自 UIPresentationController
  2. 在新的类中重写 presentationTransitionWillBegin 方法,创建一个全视图视图控制器,并添加到当前容器视图中;
  3. 在新的类中重写 dismissalTransitionWillBegin 方法,设置全视图视图控制器的渐隐消失效果;
  4. 将新的类设置为从另一个视图控制器重定向后的新视图控制器的 modalPresentationStyle