Это довольно гипотетический вопрос, просто чтобы понять правильный дизайн, но допустим, у меня есть два пользовательских UIView.
Один из них, по сути, представляет собой контейнер, который я назову ящиком. Его цель — скрыть и показать содержимое. Это очень похоже на центр уведомлений на iOS, где вы проводите пальцем, чтобы открыть его, и смахиваете его обратно, чтобы закрыть. Это универсальный контейнер, который может содержать любой другой UIView. У него есть UIPanGestureRecognizer для отслеживания пальца, который тянет его, открывая/закрывая. У него также может быть UISwipeGestureRecognizer для обнаружения «щелчка».
Другое представление представляет собой настраиваемый виджет карты с распознавателями жестов UIPan/Rotation/Pinch.
Я думаю, что вид ящика должен быть UIGestureRecognizerDelegate для Pan/Swipe GestureRecognizers, чтобы он мог предотвратить доставку касаний, если пользователь не захватит «ручку».
Мой первый инстинкт заключается в том, чтобы карта была UIGestureRecognizerDelegate жестов панорамирования/вращения/щипка, чтобы она могла позволить им выполняться одновременно.
Проблема, с которой я сталкиваюсь, заключается в том, что я действительно не хочу, чтобы карта получала какие-либо прикосновения или начинала распознавать жесты, пока ящик не будет полностью открыт. Я хотел бы иметь возможность автоматически применять это поведение в самом ящике, чтобы оно работало для всех подпредставлений прямо из коробки.
Единственный способ, который я могу придумать, - это подключить все обработчики жестов к ViewController и позволить ему делать все, но для меня это нарушает инкапсуляцию, поскольку теперь он должен знать, что жесты карты должны выполняться одновременно, что Ящик должен касаться только своей ручки, а карта должна касаться только тогда, когда она открыта.
Какие есть способы сделать это, когда логика может оставаться в представлениях, где я думаю, что она принадлежит?