UIScrollView пытается выяснить, какие касания должны пройти к его содержимому, а какие являются прокруткой, основываясь на движении сразу после начала касания. По сути, если касание сразу выглядит как прокрутка, он обрабатывает этот жест, и содержимое никогда его не видит; в противном случае жест передается (с очень короткой задержкой для первого касания).
По моему опыту, мне удавалось фиксировать горизонтальные свайпы в содержимом UIScrollView, который обрабатывал только вертикальную прокрутку — в основном это работало у меня по умолчанию. Я сделал это, установив contentSize таким же, как ширина frame представления прокрутки, что является достаточной информацией, чтобы сообщить UIScrollView, что он не будет обрабатывать горизонтальную прокрутку.
Однако похоже, что у вас проблемы с поведением по умолчанию. Одна аппаратная проблема заключается в том, что очень сложно имитировать движение пальца по трекпаду ноутбука. На вашем месте я бы проверил настройки UIScrollView по умолчанию с помощью мыши или, что предпочтительнее, на самом устройстве. Я обнаружил, что эти методы ввода работают намного лучше для передачи свайпов.
Если это не сработает, вот очень подходящий абзац из документации Apple UIScrollView:
Поскольку представление прокрутки не имеет полос прокрутки, оно должно знать, сигнализирует ли касание о намерении прокрутки или о намерении отслеживать подпредставление в содержимом. Чтобы сделать это определение, он временно перехватывает событие касания, запуская таймер и, прежде чем таймер сработает, наблюдая, совершает ли касающийся палец какое-либо движение. Если время срабатывает без существенного изменения положения, представление прокрутки отправляет события отслеживания в подвид касания представления содержимого. Если затем пользователь перетаскивает палец достаточно далеко до истечения таймера, представление прокрутки отменяет любое отслеживание в подпредставлении и выполняет прокрутку самостоятельно. Подклассы могут переопределять touchesShouldBegin:withEvent:inContentView:, pagingEnabled и touchesShouldCancelInContentView: методы (которые вызываются представлением прокрутки), чтобы повлиять на то, как вид прокрутки обрабатывает жесты прокрутки.
Таким образом, вы можете попробовать то, что они предлагают, создав подкласс UIScrollView и переопределив предложенные методы.
person
Tyler
schedule
24.09.2009