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

时间:2018-02-02 14:56:20

标签: ios swift uiviewcontroller uistoryboardsegue

我有一个包含按钮的视图控制器((ngModelChange))。该按钮以模态方式显示另一个视图控制器(<input>)。 segue的vc1设置为vc2

我还以编程方式在vc1上创建了presentation style(它涵盖了整个over current context的{​​{1}})。

现在,我需要将视觉效果的效果设置为UIVisualEffectView,但是vc1以模态方式显示(view的{​​{1}}设置为{{ 1}},因此UIBlurEffect后面仍然可以看到vc2

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

2 个答案:

答案 0 :(得分:1)

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中所述和密切相关的tutorial

答案 1 :(得分:0)

您可以使用子ViewController机制。

let vc2 = VC2()

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

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