Определить, когда пользователь прервал анимацию UIScrollView - PullRequest
0 голосов
/ 22 мая 2018

У меня есть приложение с горизонтальной прокруткой uiscrollview, оно показывает 3 подпредставления рядом.Я использую Objective C.

Когда пользователь перетаскивает и отпускает, код обнаруживает, который является ближайшим подпредставлением, и автоматически прокручивается до ближайшего из 3 подпредставлений, делая его полностью центрированным.

Этовсе работает нормально, за исключением:

  • Когда представление прокрутки анимирует самоцентрирующийся ход, пользователь может прервать его, просто нажав его (не перетаскивая).

  • Это одно касание останавливает анимацию и вид прокрутки, оставляя его не в центре ни одного из 3 подвидов.

  • Ни один из методов делегатов, которые я обнаружил, не может обнаружить, когда анимация прерывается изатем продолжите центрирование.

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Еще раз спасибо mag_zbc!

Это действительно помогло мне найти решение.

Я слишком усложнил анимацию, проверяя текущую позицию как после того, как пользователь закончил перетаскивание, так и когда анимацияготово.

Чтобы решить эту проблему, я просто проверил текущее смещение в scrollViewDidEndDecelerating::

-Если окончательное смещение было одним из трех правильных местоположений (автоматическое смещение завершено непрерывно), то выполнитеничего.

-Если смещение не было одним из правильных местоположений (анимация была прервана), затем двигайтесь снова.

0 голосов
/ 22 мая 2018

Когда вы запускаете анимацию прокрутки с помощью setContentOffset:animated: или scrollToRectVisible:animated:, ее конец будет отмечен UIScrollViewDelegate методом scrollViewDidEndScrollingAnimation:.Если до этого вызывался другой метод делегата, например scrollViewWillBeginDragging: или scrollViewDidEndDecelerating: - это означает, что пользователь прервал анимацию перетаскиванием (или касанием).

Что вы хотите сделать, это перезапустить анимацию, когда пользовательпрекращает перетаскивание - в scrollViewDidEndDragging:willDecelerate: или scrollViewDidEndDecelerating:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...