UIScrollView - выяснить, где остановится прокрутка - PullRequest
3 голосов
/ 07 февраля 2010

Я пытаюсь выяснить, как вычислить, где остановится просмотр прокрутки, когда пользователь делает жест пролистывания, и просмотр прокрутки замедляется. Я пытаюсь использовать функции делегата, но я не могу точно понять это. Пожалуйста, помогите!

- (void) scrollViewDidScroll:(UIScrollView *)scrollView;
- (void) scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;
- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView;

Ответы [ 5 ]

3 голосов
/ 01 августа 2014

Эта тема немного устарела, но все еще занимает первое место в поисках этой проблемы.

Протокол UIScrollViewDelegate содержит следующий метод, который сообщает вашему коду, где ожидается остановка представления прокрутки ...

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset

Параметр targetContentOffset является входным параметром, поэтому если вы установите для него другое значение, представление прокрутки фактически остановится с указанным смещением.

2 голосов
/ 05 августа 2010

К сожалению, UIScrollView не работает таким образом - нет способа спросить его заранее, где заканчивается торможение.

0 голосов
/ 13 октября 2010

Существует переменная для текущего ускорения, которая хранится в реализации UIScrollView, но использовать ее в качестве решения невозможно, поскольку вы не можете скомпилировать код для устройства.

0 голосов
/ 08 февраля 2010

Это должна быть простая математика. Свойство contentOffset представления прокрутки обновляется каждый раз, когда вызывается scrollViewDidScroll. Вам нужно только сохранить вектор между двумя позициями и время, чтобы получить хотя бы конечную позицию замедления спуска.

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

0 голосов
/ 07 февраля 2010

Звучит сложно. Пользователь может снова начать прокрутку, пока она замедляется, внезапно остановить или нет. Может быть, вы можете обойтись, просто выполнив DidEndDecelerating, то есть просто определив положение, когда прокрутка закончена?

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