Ios 从完成块访问UIVisualEffectView时发生EXC\u BAD\u访问异常崩溃

Ios 从完成块访问UIVisualEffectView时发生EXC\u BAD\u访问异常崩溃,ios,swift,uiimageview,uivisualeffectview,Ios,Swift,Uiimageview,Uivisualeffectview,我正在使用UIVisualEffectView对UIImageView应用模糊效果 当我试图从完成块访问UIVisualEffectView时,我得到了崩溃EXC\u BAD\u访问 我也试着把代码放在主线程中,但是没有什么好的结果 这是我的密码 func addBlurEffectView(frame: CGRect, value: CGFloat) { if value != 0 { if let sub = self.subviews.compactMap({ $0

我正在使用
UIVisualEffectView
UIImageView
应用模糊效果

当我试图从完成块访问
UIVisualEffectView
时,我得到了崩溃
EXC\u BAD\u访问

我也试着把代码放在主线程中,但是没有什么好的结果

这是我的密码

func addBlurEffectView(frame: CGRect, value: CGFloat) {
    if value != 0 {
        if let sub = self.subviews.compactMap({ $0 as? UIVisualEffectView }).first {
            print("Blur effect view exists")
            sub.frame = self.bounds
            self.blurEffect.setValue(value/10, forKeyPath: "blurRadius")
            sub.effect = self.blurEffect
        } else {
            print("Blur effect view doesn't exist")
            self.blurEffect = (NSClassFromString("_UICustomBlurEffect") as! UIBlurEffect.Type).init()
            let blurView = UIVisualEffectView(frame: /*UIScreen.main.bounds*/frame)
            self.blurEffect.setValue(value/10, forKeyPath: "blurRadius")
            blurView.effect = self.blurEffect
            blurView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
            self.addSubview(blurView)
        }
    } else {
        if let sub = self.subviews.compactMap({ $0 as? UIVisualEffectView }).first {
            sub.removeFromSuperview()
        }
    }
}
这里,在上述代码中,模糊效果是全局变量,即

var blurEffect = (NSClassFromString("_UICustomBlurEffect") as! UIBlurEffect.Type).init()
注意:我在slider的valueChanged事件中也使用了这段代码,这一切都能很好地工作,但问题只有在我从完成块访问函数时才会出现

我在下面的线上看到了坠机

sub.frame=self.bounds

我不知道如何解决这个问题


谢谢

你为什么使用这种方法?您为什么不以通常的方式设置效果视图-例如@Paulw11谢谢您的回复!您的问题的答案是,我想随着滑块的变化增加和减少模糊效果值,这就是为什么我不以常规方式使用它的原因为什么您使用这种方法?您为什么不以通常的方式设置效果视图-例如@Paulw11谢谢您的回复!您的问题的答案是,我想随着滑块的变化增加和减少模糊效果值,这就是为什么我不以常规方式使用它的原因