在以模态方式从视图控制器切换到另一个视图控制器后,在视图控制器上添加模糊效果

Adding a blur effect on a View Controller after segueing from it to another one modally

我有一个包含按钮的视图控制器(vc1)。该按钮以模态方式显示另一个视图控制器(vc2)。 segue 的 presentation style 设置为 over current context

我还以编程方式在 vc1 上创建了一个 UIVisualEffectView(它涵盖了整个 vc1view)。

现在,我需要将视觉效果的效果设置为 UIBlurEffect,但是在模态显示 vc2 之后(viewbackgroundColour 设置为clear,所以 vc1vc2 后面仍然可见。

是否可以在不必编写自定义视图控制器转换的情况下实现?如果可以,如何实现?如果您知道如何执行此操作,我将不胜感激任何帮助或建议。

您可以使用子 ViewController 机制。

let vc2 = VC2()

vc1.addChildViewController(vc2)
vc2.view.frame = vc1.view.frame

vc1.view.addSubview(vc2.view)
vc2.didMove(toParentViewController: vc1)

iOS 中默认不出现模糊过渡。所以你需要自定义代码。
一个简单的解决方案是添加一个子视图:

在转换到 vc2 时添加以下代码:

let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
blurEffectView = UIVisualEffectView(effect: blurEffect)    // Global variable
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.view.addSubview(blurEffectView)

NotificationCenter.default.addObserver(self, selector: #selector(self.removeBlurView), name: NSNotification.Name(rawValue: "removeBlurView"), object: nil)  

去除模糊视图的功能(在vc1中):

func removeBlurView()
{
    NotificationCenter.default.removeObserver(self)
    blurEffectView.removeFromSuperview()
}  

关闭 vc2 时在 vc2 中添加以下内容:

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "removeBlurView"), object: nil)

Ray's tutorial and a closely related tutorial

中所述,还有其他方法可以实现此目的