在以模态方式从视图控制器切换到另一个视图控制器后,在视图控制器上添加模糊效果
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
(它涵盖了整个 vc1
的 view
)。
现在,我需要将视觉效果的效果设置为 UIBlurEffect
,但是在模态显示 vc2
之后(view
的 backgroundColour
设置为clear
,所以 vc1
在 vc2
后面仍然可见。
是否可以在不必编写自定义视图控制器转换的情况下实现?如果可以,如何实现?如果您知道如何执行此操作,我将不胜感激任何帮助或建议。
您可以使用子 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
中所述,还有其他方法可以实现此目的
我有一个包含按钮的视图控制器(vc1
)。该按钮以模态方式显示另一个视图控制器(vc2
)。 segue 的 presentation style
设置为 over current context
。
我还以编程方式在 vc1 上创建了一个 UIVisualEffectView
(它涵盖了整个 vc1
的 view
)。
现在,我需要将视觉效果的效果设置为 UIBlurEffect
,但是在模态显示 vc2
之后(view
的 backgroundColour
设置为clear
,所以 vc1
在 vc2
后面仍然可见。
是否可以在不必编写自定义视图控制器转换的情况下实现?如果可以,如何实现?如果您知道如何执行此操作,我将不胜感激任何帮助或建议。
您可以使用子 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
中所述,还有其他方法可以实现此目的