Как рассчитать содержимое contentOffset объекта UIScrollView в движении - PullRequest
6 голосов
/ 07 февраля 2011

Я использую UIScrollView в качестве основы для компонента, который использует базовую анимацию. Когда пользователь проводит пальцем по виду, я хотел бы расположить элементы в соответствии с местом назначения (отдыха) в представлении прокрутки. Для этого мне нужно вычислить целевой contentOffset UIScrollView в scrollViewWillBeginDecelerating: метод или аналогичный.

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

Есть ли простой способ сделать это?

Ответы [ 4 ]

1 голос
/ 15 ноября 2012

Для этого есть метод делегата:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS5(5_0);

Согласно документу:

Вызывается пальцем вверх, если пользователь перетянул. скорость в пунктах / секунду. targetContentOffset может быть изменен, чтобы настроить, где представление прокрутки останавливается. не вызывается, когда pagingEnabled - ДА

0 голосов
/ 10 августа 2014

Не уверен, если вам все еще это нужно.но это то, как вы можете получить в делегате UIScrollView.

 -(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
NSLog(@"X offset: %f", targetContentOffset->x);
NSLog(@"Y offset: %f", targetContentOffset->y);
}
0 голосов
/ 07 февраля 2011

Я полагаю, что вы имеете в виду поведение, автоматически предоставляемое pagingEnabled на UIScrollView. В справочной библиотеке iOS на UIScrollView, когда включена подкачка страниц, «представление прокрутки останавливается на кратных границах представления прокрутки при прокрутке пользователя». Я использую это поведение все время, и я верю, что вы описываете. Он выполняет всю тяжелую работу за вас - просто установив одно свойство!

ОБНОВЛЕНИЕ: Мне кажется, я неправильно понял ваш вопрос. Вы всегда можете проверить свойство contentOffset UIScrollView, чтобы определить его текущее происхождение в представлении прокрутки. Вы можете сделать это одним из методов делегата, вероятно scrollViewDidEndDecelerating:.

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

Есть ли конкретная причина, по которой вам нужно заранее знать, где остановится просмотр прокрутки?Вы можете расположить ваши представления в layoutSubviews (если вы подкласс UIScrollView) или в scrollViewDidScroll: в реализации делегата с прокруткой.

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