【问题标题】:Blur effect duplicates everytime I open a view每次打开视图时,模糊效果都会重复
【发布时间】:2015-04-17 13:26:27
【问题描述】:

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

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

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

如果您认为这是由其他原因引起的,请告诉我可能是什么原因。

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

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

非常感谢。

【问题讨论】:

  • 在自动布局应用更改后调整 didlayoutSubviews 中的 blurView 大小。

标签: ios swift uiblureffect


【解决方案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 方法,以便在发生旋转时重新应用模糊效果(如果这对您很重要)。在这里,您只需替换您最初添加的那个。

【讨论】:

    【解决方案2】:

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

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

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

    代码:

    在 viewWillAppear 中:

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

    【讨论】:

    • 非常感谢。我认为这就是解决方案!但我不知道如何设置标志,我也不知道如何检查它!为了解决这个问题,我所做的就是从超级视图中移除每次视图消失时的模糊效果,它可以工作,但我知道这不是必须要做的。
    • 您不需要新的属性。只需使用 self.picBlurView。如果尚未创建,则创建并添加。
    • 是的,但你建议对我的进行编辑,所以我编辑了:P
    猜你喜欢
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 2023-02-17
    • 2015-12-29
    • 2023-03-18
    • 2021-06-17
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多