Как? Сделать так что бы нативный EdgeGesture срабатывал бы на всем вью.
Как то на работе меня озадачили сделать так что бы сцена скрывалась Pan жестом вправо.
Я тогда был Джуниор iOS разработчиком и много времени потратил на то, что бы добавить жест на экран, добиться того что бы он не конфликтовал с другими PanGesture на этом экране и во вложенных вью. Решение было разработано и я счастливый получил апрувы, влил задачу в Dev, задача успешно прошла тестирование и на приемке релиз кандидата я услышал что мое решение полное говно.
Причина - мое решение не учитывало то что EdgeGesture красиво и анимировано работает с UINavigationViewController.
Вернее с его UINavigationBar. Не сразу поняв в чем проблема, потратив еще время на объяснение того что это все фича, а не баг - я, конечно же, приступил к поиску решения.
Не буду лукавить, я нашел решение на Obj-C где то на Китайской или на Японской части интернета(я не вижу разницы в иероглифах). Немного адаптировал решение под Swift сделал его безопасным и запушил. Бизнес счастлив, я молодец, мне дали лычку (находчивый Джун).
import UIKit extension UINavigationController { /// Add default navigation animation to other view. /// - important: /// Return nil in case UIGestureRecognaizer hasn't been created for some reasone. /// - Parameter view: target view to adding UIGestureRecognizer @discardableResult func addInteractivePanGesture(to view: UIView) -> UIGestureRecognizer? { guard let targets = interactivePopGestureRecognizer?.value(forKey: "_targets") as? [AnyObject] else { return nil } let dict = targets[0] let target = dict.value(forKey: "target") as AnyObject let action = Selector(("handleNavigationTransition:")) guard target.responds(to: action) else { return nil } let gesture = UIPanGestureRecognizer(target: target, action: action) view.addGestureRecognizer(gesture) return gesture } }
Вот как бы и все.
Жест возвращается что бы ты мог определить стратегии решения конфликтов.