每次打开视图时模糊效果都会重复
Blur effect duplicates everytime I open a view
我有一个 UITabBar
,其中包含 "main" 和 "profile" 部分。在配置文件中,我使用了一个充满整个屏幕的背景图像,具有模糊效果。它工作得很好。当我返回主界面并再次返回配置文件时,会在第一个模糊效果上添加一个新的模糊效果。
如果我把设置模糊效果对应的代码放在viewDidLoad()
中就可以正常工作,只添加一次效果。但是有一个问题,模糊效果并没有填满整个屏幕。我想这是因为在 viewDidLoad
中没有人知道 imageView
的框架,所以它填充了图像的 3/4 部分。
我的问题是:我该如何解决这个问题?假设它是由于图像帧引起的,目前未知。如何设置框架尺寸?
如果您认为它是由其他原因引起的,请告诉我可能是什么原因。
这是我正在使用的模糊代码?
self.picBlurView = UIVisualEffectView(effect: self.picBlur)
self.picBlurView.frame = self.profileSubView.bounds
self.profileSubView.addSubview(self.picBlurView)
非常感谢。
您可以在 class 中设置一个标志,例如“_alreadyBlurred
”。您在 viewDidLoad
.
中将其设置为 NO
在viewWillAppear
中,检查是否flag == NO
,如果是,则制作模糊效果并设置flag = YES
。
然后在下一次调用中它不会添加另一个模糊效果,并且在这个方法中你知道帧。
代码:
在 viewWillAppear 中:
if (_myBlurView == nil) {
....
// do blur effect and add
....
}
由于您已经将 picBlurView
作为 属性,只需检查它是否存在。如果不存在,则创建它并添加它。否则什么都不做。在 viewWillAppear
.
中执行此操作
if (self.picBlurView == nil){
self.picBlurView = UIVisualEffectView(effect: self.picBlur)
self.picBlurView.frame = self.profileSubView.bounds
self.profileSubView.addSubview(self.picBlurView)
}
您可能想要实现方法 willAnimateRotationToInterfaceOrientation
以便在发生旋转时重新应用模糊效果(如果您认为这很重要)。在这里你只需替换你最初添加的那个。
我有一个 UITabBar
,其中包含 "main" 和 "profile" 部分。在配置文件中,我使用了一个充满整个屏幕的背景图像,具有模糊效果。它工作得很好。当我返回主界面并再次返回配置文件时,会在第一个模糊效果上添加一个新的模糊效果。
如果我把设置模糊效果对应的代码放在viewDidLoad()
中就可以正常工作,只添加一次效果。但是有一个问题,模糊效果并没有填满整个屏幕。我想这是因为在 viewDidLoad
中没有人知道 imageView
的框架,所以它填充了图像的 3/4 部分。
我的问题是:我该如何解决这个问题?假设它是由于图像帧引起的,目前未知。如何设置框架尺寸?
如果您认为它是由其他原因引起的,请告诉我可能是什么原因。
这是我正在使用的模糊代码?
self.picBlurView = UIVisualEffectView(effect: self.picBlur)
self.picBlurView.frame = self.profileSubView.bounds
self.profileSubView.addSubview(self.picBlurView)
非常感谢。
您可以在 class 中设置一个标志,例如“_alreadyBlurred
”。您在 viewDidLoad
.
在viewWillAppear
中,检查是否flag == NO
,如果是,则制作模糊效果并设置flag = YES
。
然后在下一次调用中它不会添加另一个模糊效果,并且在这个方法中你知道帧。
代码:
在 viewWillAppear 中:
if (_myBlurView == nil) {
....
// do blur effect and add
....
}
由于您已经将 picBlurView
作为 属性,只需检查它是否存在。如果不存在,则创建它并添加它。否则什么都不做。在 viewWillAppear
.
if (self.picBlurView == nil){
self.picBlurView = UIVisualEffectView(effect: self.picBlur)
self.picBlurView.frame = self.profileSubView.bounds
self.profileSubView.addSubview(self.picBlurView)
}
您可能想要实现方法 willAnimateRotationToInterfaceOrientation
以便在发生旋转时重新应用模糊效果(如果您认为这很重要)。在这里你只需替换你最初添加的那个。