From 4bde8a435bb874099ac4209da1000a4320cc7d05 Mon Sep 17 00:00:00 2001 From: SBiOSoftWhare Date: Wed, 22 May 2019 16:35:46 +0200 Subject: [PATCH] Room contextual menu: Dismiss when swipe up or down. --- .../RoomContextualMenuViewController.swift | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/Riot/Modules/Room/ContextualMenu/RoomContextualMenuViewController.swift b/Riot/Modules/Room/ContextualMenu/RoomContextualMenuViewController.swift index 5a111508d..2318a0bb4 100644 --- a/Riot/Modules/Room/ContextualMenu/RoomContextualMenuViewController.swift +++ b/Riot/Modules/Room/ContextualMenu/RoomContextualMenuViewController.swift @@ -79,7 +79,7 @@ final class RoomContextualMenuViewController: UIViewController, Themable { self.backgroundOverlayView.isUserInteractionEnabled = true self.menuToolbarView.fill(contextualMenuItems: self.contextualMenuItems) - self.setupBackgroundOverlayTapGestureRecognizer() + self.setupBackgroundOverlayGestureRecognizers() self.errorPresenter = MXKErrorAlertPresentation() @@ -125,12 +125,20 @@ final class RoomContextualMenuViewController: UIViewController, Themable { // MARK: - Private - private func setupBackgroundOverlayTapGestureRecognizer() { - let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(gestureRecognizer:))) + private func setupBackgroundOverlayGestureRecognizers() { + + let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handle(gestureRecognizer:))) + tapGestureRecognizer.delegate = self + + let swipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handle(gestureRecognizer:))) + swipeGestureRecognizer.direction = [.down, .up] + swipeGestureRecognizer.delegate = self + self.backgroundOverlayView.addGestureRecognizer(tapGestureRecognizer) + self.backgroundOverlayView.addGestureRecognizer(swipeGestureRecognizer) } - @objc private func handleTap(gestureRecognizer: UIGestureRecognizer) { + @objc private func handle(gestureRecognizer: UIGestureRecognizer) { self.delegate?.roomContextualMenuViewControllerDidTapBackgroundOverlay(self) } @@ -143,6 +151,7 @@ final class RoomContextualMenuViewController: UIViewController, Themable { } } +// MARK: - ReactionsMenuViewModelCoordinatorDelegate extension RoomContextualMenuViewController: ReactionsMenuViewModelCoordinatorDelegate { func reactionsMenuViewModel(_ viewModel: ReactionsMenuViewModelType, didSendReaction reaction: String, isAddReaction: Bool) { @@ -157,3 +166,12 @@ extension RoomContextualMenuViewController: ReactionsMenuViewModelCoordinatorDel } } } + +// MARK: - UIGestureRecognizerDelegate +extension RoomContextualMenuViewController: UIGestureRecognizerDelegate { + + // Avoid triggering background overlay gesture recognizers when touching reactions menu + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { + return touch.vc_isInside(view: self.reactionsMenuView) == false + } +}