Ich habe Schaltflächen, die ich in meiner Ansicht erstelle, wenn die Seite geladen wird.Gestenerkenner-Code wird nach dem Verlassen und Zurückkommen zweimal aufgerufen.
In meinem viewDidAppear Ich habe
bekamNotificationCenter.default.addObserver(self, selector: #selector(self.didDoubleTapOnACircle(sender:)), name: .didDoubleTap , object: nil)
Diese werden hören Benachrichtigungen nach Ansicht der benutzerdefinierten Klasse einrichten. Zum Beispiel:
func doubleTapAction(sender : UIButton) {
print("Double tapped")
NotificationCenter.default.post(name: .didDoubleTap , object: nil, userInfo: ["tagTapped" : self.tag])
}
und dann habe ich diese
let doubleTap = UITapGestureRecognizer(target: self, action: #selector(self.doubleTapAction(sender:)))
doubleTap.numberOfTapsRequired = 2
self.addGestureRecognizer(doubleTap)
So alle Arbeiten auf Vorlast bekam. In meiner Hauptansicht, wenn ich auf eine dieser Ansichten doppelklicke, läuft die Funktion, die ich habe, einmal und genau das, was erwartet wird. Dieser Code hat schon seit Monaten funktioniert und aus dem Nichts ist er zweimal gestartet, wenn ich gehe und auf die Seite zurückkomme. Es spielt keine Rolle, wie oft ich gehe und zurückkomme, es endet beim Laufen zweimal.
Was ist verwirrend ist in meiner doubleTapAction Ich habe den Ausdruck von "Double angetippt", aber in meiner Funktion rufe ich meine MainVC didDoubleTapOnACircle, ich habe einen Ausdruck und das wird zweimal gedruckt. Der Gestenerkenner wird nur einmal "erkannt", aber die eigentliche Funktion wird zweimal aufgerufen.
In meinem viewWillDissapear Ich habe
bekamNotificationCenter.default.removeObserver(self, name: .didDoubleTap, object: nil)
Dies geschieht bei jedem einzelnen meiner Gestenerkenner Funktionen. Die Seite lädt zum ersten Mal, es läuft alles einmal. Wenn ich gehe, fangen sie alle zweimal an zu laufen, aber der Ausdruck auf der tatsächlichen Klassenfunktion wie doubleTapAction wird einmal gedruckt.
Irgendwelche Ideen?
vielleicht ist es, weil Sie addObserver zweimal (addObserver ist in Ihnen ** viewDidAppear **)? –
Verwenden Sie 'Cmd + Shift + F', um alle Projekte für' didDoubleTap' zu finden und sehen Sie, ob SieObserver zweimal für diesen Schlüssel hinzufügen – t4nhpt