Подтвердить что ты не робот

Предотвращение блокировки UIScrollView UIPanGestureRecognizer UIScreenEdgePanGestureRecognizer

У меня есть UIScrollView, который заполняет экран на одной странице моего приложения, но я хочу, чтобы пользователь мог панорамироваться с краю экрана, чтобы открыть представление позади него. Проблема в том, что UIScrollView крадет штрихи с моего UIScreenEdgePanGestureRecognizer на краю экрана. К сожалению, я не могу получить доступ к UIScreenEdgePanGestureRecognizer из контроллера представления, у которого есть UIScrollView (и наоборот), поэтому я не могу использовать метод requireGestureRecognizerToFail:, потому что я не могу указать, какой распознаватель жестов должен быть допущены к неудаче. Контроллер представления со списком прокрутки является контроллером дочернего представления контроллера представления контейнера, который имеет распознаватель жестов жесткости экрана, прикрепленный к одному из собственных представлений контроллера контейнера.

Я также не могу использовать метод делегата

-(BOOL)gestureRecognizer:shouldRequireFailureOfGestureRecognizer:

потому что UIScrollView не позволит мне установить мой контроллер представления в качестве делегата прокрутки UIPanGestureRecognizer.

Как я могу препятствовать тому, чтобы scrollview видела касание края панорамы от моего собственного распознавателя жестов?

4b9b3361

Ответ 1

К сожалению, создание этого поведения может быть реальным P *** я * t ** A **.

К счастью, создание такого поведения возможно с помощью делегата UIGestureRecognizer, даже если вы не можете получить доступ к одному GestureRecognizer напрямую.

-(BOOL)gestureRecognizer:shouldRequireFailureOfGestureRecognizer:
-(BOOL)gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
-(BOOL)gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer: 

Второй параметр ( "otherGestureRecognizer" ), переданный в методах делегата, содержит UIScrollView PanGestureRecognizer (или частные подклассы Apple), когда ваш gestureRecognizer "сталкивается" с помощью scrollView.

Так просто установите делегат UIScreenEdgePanGestureRecognizer для ответа на методы делегата.

Именование этих двух методов очень субоптимально и, честно говоря, я действительно не знаю, каковы правильные возвращаемые значения для вашего случая.

У меня вчера была эта проблема, и я решил ее жестоким испытанием и ошибкой.

Im мой случай, возвращая NO из методов shouldRequireToFail и shouldBeRequiredToFail и YES из метода одновременного решения моей проблемы.

Note: Returning NO from both methods changed the behavior compared to not 
even implementing the methods at all. Even though the documentation says 
the default return value is NO.

Однако, любое поведение GestureRecognizer может быть достигнуто с помощью методов делегата. Но, как я сказал выше, наименование методов просто очень запутанно. + для этих методов существует не более полезная документация.

Ответ 2

Это можно сделать без необходимости устанавливать делегат представления жесткого диска экрана в ваш контроллер представления.

[scrollView.panGestureRecognizer requireGestureRecognizerToFail:screenPanGesture];