0

我有一个UITabBar, 部分,“主要”和“个人资料”。在配置文件中,我使用填充整个屏幕的背景图像,具有模糊效果。它工作得很好。当我回到主要并再次回到配置文件时,在第一个模糊效果上添加了一个新的模糊效果。

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

我的问题是:我该如何解决这个问题?假设它是由于图像帧引起的,目前尚不清楚。如何设置框架尺寸?

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

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

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

非常感谢。

4

2 回答 2

1

您可以在您的班级中设置一个标志,例如“ _alreadyBlurred”。您将它设置为 NO 在viewDidLoad.

viewWillAppear中,您检查是否flag == NO,如果是,则制作模糊效果并设置flag = YES

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

代码 :

在 viewWillAppear 中:

if (_myBlurView == nil) {
    ....
    // do blur effect and add
    ....
}
于 2015-04-17T13:29:22.023 回答
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,以便在发生旋转时重新应用模糊效果(如果这对您很重要)。在这里,您只需替换您最初添加的那个。

于 2015-04-17T13:37:55.090 回答