Ios 使用手势识别器从superview中删除

Ios 使用手势识别器从superview中删除,ios,swift,Ios,Swift,我创建了一个模糊效果视图,如下所示: var blurEffectView: UIVisualEffectView{ let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light) let blurEffectView = UIVisualEffectView(effect: blurEffect) blurEffectView.frame = self.view.bounds blurEffectVie

我创建了一个模糊效果视图,如下所示:

var blurEffectView: UIVisualEffectView{
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = self.view.bounds
    blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    return blurEffectView
}
然后是要添加到效果视图的TapGestureRecognitor

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.dismissBlurView))
            self.blurEffectView.addGestureRecognizer(tapGestureRecognizer)
            self.mapView.addSubview(self.blurEffectView)
下面是取消它的函数:

func dismissBlurView(){
    blurEffectView.removeFromSuperview()
}
我显然遗漏了一些东西,因为当我点击模糊视图时,不会调用dismissBlurView。

试试这个

class YourViewController: UIViewController, UIGestureRecognizerDelegate{

    tapGestureRecognizer.delegate = self

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
            return true
    }
}

尝试使用此代码,因为它对我有效。一、 我已更改块声明,并在viewDidLoad中设置块外部的帧大小

var blurEffectView: UIVisualEffectView = {
        let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        return blurEffectView
   }()
//在viewDidLoad中设置UIVisualEffectView框架

self.blurEffectView.frame = self.view.bounds

        self.blurEffectView.addGestureRecognizer(UITapGestureRecognizer.init(target: self, action: #selector(self.dismissBlurView(gesture:))))
        self.view.addSubview(self.blurEffectView)

func dismissBlurView(gesture: UITapGestureRecognizer){
        blurEffectView.removeFromSuperview()
    }

它可能被mapView手势识别器覆盖。尝试将模糊视图放置在地图视图上,但不要作为地图视图的子视图。作为父视图的子视图。这不起作用,我需要它作为mapView的超级视图,因为在模糊效果视图的顶部有另一个视图,它是父视图的子视图,不应该被模糊。只需使用bringtofront到您的模糊视图,而此代码可能会回答这个问题,提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。@Theways谢谢你的建议,我一定会处理好的。