From bd02a7e88a9cf023110f126b8b6ce06ab2cb95a4 Mon Sep 17 00:00:00 2001 From: Peter <> Date: Fri, 11 Oct 2019 16:15:33 +0400 Subject: [PATCH] Fail simultaneous taps --- .../TapLongTapOrDoubleTapGestureRecognizer.swift | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/submodules/Display/Display/TapLongTapOrDoubleTapGestureRecognizer.swift b/submodules/Display/Display/TapLongTapOrDoubleTapGestureRecognizer.swift index add9373781..62107686ed 100644 --- a/submodules/Display/Display/TapLongTapOrDoubleTapGestureRecognizer.swift +++ b/submodules/Display/Display/TapLongTapOrDoubleTapGestureRecognizer.swift @@ -21,6 +21,19 @@ private func cancelScrollViewGestures(view: UIView?) { } } +private func cancelOtherGestures(gesture: TapLongTapOrDoubleTapGestureRecognizer, view: UIView) { + if let gestureRecognizers = view.gestureRecognizers { + for recognizer in gestureRecognizers { + if let recognizer = recognizer as? TapLongTapOrDoubleTapGestureRecognizer, recognizer !== gesture { + recognizer.cancel() + } + } + } + for subview in view.subviews { + cancelOtherGestures(gesture: gesture, view: subview) + } +} + private class TapLongTapOrDoubleTapGestureRecognizerTimerTarget: NSObject { weak var target: TapLongTapOrDoubleTapGestureRecognizer? @@ -119,6 +132,9 @@ public final class TapLongTapOrDoubleTapGestureRecognizer: UIGestureRecognizer, if let (location, _) = self.touchLocationAndTimestamp { self.lastRecognizedGestureAndLocation = (.longTap, location) if let longTap = self.longTap { + if let window = self.view?.window { + cancelOtherGestures(gesture: self, view: window) + } self.recognizedLongTap = true self.state = .began longTap(location, self)