Ios 离开和返回视图后调用两次手势识别器代码

Ios 离开和返回视图后调用两次手势识别器代码,ios,swift,uigesturerecognizer,Ios,Swift,Uigesturerecognizer,加载页面时,我在视图上创建了一些按钮 在我看来我有 NotificationCenter.default.addObserver(self, selector: #selector(self.didDoubleTapOnACircle(sender:)), name: .didDoubleTap , object: nil) 它们正在侦听在视图的自定义类中设置的通知。例如: func doubleTapAction(sender : UIButton) { print("D

加载页面时,我在视图上创建了一些按钮

在我看来我有

    NotificationCenter.default.addObserver(self, selector: #selector(self.didDoubleTapOnACircle(sender:)), name: .didDoubleTap , object: nil)
它们正在侦听在视图的自定义类中设置的通知。例如:

 func doubleTapAction(sender : UIButton) {

    print("Double tapped")

    NotificationCenter.default.post(name: .didDoubleTap , object: nil, userInfo: ["tagTapped" : self.tag])
}
然后我就有了

    let doubleTap = UITapGestureRecognizer(target: self, action: #selector(self.doubleTapAction(sender:)))
    doubleTap.numberOfTapsRequired = 2
    self.addGestureRecognizer(doubleTap)
所以这些都是在初始载荷下工作的。在我的主视图中,当我双击其中一个视图时,我得到的函数会运行一次,并完全按照预期执行。这段代码已经运行了几个月,如果我离开并返回页面,它不知从哪里开始运行了两次。不管我离开和回来多少次,我都会跑两次

令人困惑的是,在我的doubleTapAction中,我有“双击”的打印输出),但在我的函数中,我在我的mainVC didDoubleTapOnCircle中调用,我有一个打印输出,它被打印了两次。手势识别器仅被“识别”一次,但实际函数被调用两次

在我看来,我已经失去了理智

NotificationCenter.default.removeObserver(self, name: .didDoubleTap, object: nil)
我的每个手势识别器功能都会出现这种情况。第一次加载页面时,所有页面都运行一次。如果我离开,它们都开始运行两次,但实际类函数(如doubleTapAction)上的打印输出只打印一次


有什么想法吗?

将轻触手势代码移动到
viewDidLoad
而不是
viewDidAppear

let doubleTap = UITapGestureRecognizer(target: self, action: #selector(self.doubleTapAction(sender:)))
doubleTap.numberOfTapsRequired = 2
self.addGestureRecognizer(doubleTap)

每次返回该屏幕时,都会调用
viewdide
。移动到其他屏幕时,无需删除手势识别器-仅当该视图可见时才会调用它们。

将轻触手势代码移动到
viewDidLoad
中,而不是
viewdidearch

let doubleTap = UITapGestureRecognizer(target: self, action: #selector(self.doubleTapAction(sender:)))
doubleTap.numberOfTapsRequired = 2
self.addGestureRecognizer(doubleTap)

每次返回该屏幕时,都会调用
viewdide
。当您移动到另一个屏幕时,无需删除手势识别器-它们仅在该视图可见时才会被调用。

可能是因为您添加了两次观察者(添加观察者在您的视图中显示)?使用
Cmd+Shift+F
查找
diddoulletap
短语的所有项目,查看是否为该键添加了两次观察者可能是因为您添加了两次观察者(addObserver在您的视图中显示)?使用
Cmd+Shift+F
查找
diddoulletap
短语的所有项目,并查看是否为该键添加了两次观察者