每次打开视图时,模糊效果都会重复

时间:2015-04-17 13:26:28

标签: ios swift uiblureffect

我有一个UITabBar,其中包含“主要”和“个人资料”部分。在配置文件中,我使用填充整个屏幕的背景图像,具有模糊效果。它的效果非常好。当我返回主页并再次返回配置文件时,会在第一个模糊效果上添加新的模糊效果。

如果我将对应的代码设置为viewDidLoad()中的模糊效果,它可以正常工作,效果只会添加一次。但是有一个问题,模糊效果并没有填满整个屏幕。我想这是因为在viewDidLoad中没有人知道imageView的帧,所以它填充了图像的3/4部分。

我的问题是:我该如何解决这个问题?假设它是由图像帧引起的,现在还不知道。如何设置框架度量?

如果你认为它是由另一件事引起的,请告诉我可能是什么。

这是我正在使用的模糊代码?

self.picBlurView = UIVisualEffectView(effect: self.picBlur)
self.picBlurView.frame = self.profileSubView.bounds    
self.profileSubView.addSubview(self.picBlurView)

非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以在班级中设置标记,例如“_alreadyBlurred”。您在viewDidLoad

中将其设置为NO

viewWillAppear中,您检查flag == NO是否有效,并设置flag = YES

然后在下一个调用中它不会添加另一个模糊效果,并且在此方法中你知道框架。

代码:

在viewWillAppear中:

if (_myBlurView == nil) {
    ....
    // do blur effect and add
    ....
}

答案 1 :(得分:1)

由于您已将picBlurView作为属性,因此只需检查它是否存在即可。如果不存在,则创建并添加它。否则什么都不做。在viewWillAppear中执行此操作。

if (self.picBlurView == nil){
  self.picBlurView = UIVisualEffectView(effect: self.picBlur)
  self.picBlurView.frame = self.profileSubView.bounds
  self.profileSubView.addSubview(self.picBlurView)
}

您可能希望实现方法willAnimateRotationToInterfaceOrientation,以便在轮换发生时重新应用模糊效果(如果这对您很重要)。在这里,您只需替换最初添加的那个。