Начиная с iOS 5, в UIScrollViewDelegate
есть метод делегата scrollViewWillEndDragging:withVelocity:targetContentOffset:
. Это позволяет реализовать произвольный пейджинг.
Чтобы это работало, сначала нужно установить для свойства pagingEnabled
значение NO
, в противном случае метод делегата, о котором я говорю, не вызывается. Представление прокрутки теперь вызывает этот метод делегата всякий раз, когда пользователь поднимает палец, и представление прокрутки хочет определить, где завершить прокрутку.
Магия - последний аргумент, targetContentOffset
: это указатель на CGPoint
и используется как переменная ввода / вывода. Это означает, что эта переменная говорит вам, куда прокрутка хочет перейти. Но это позволяет вам изменить это целевое местоположение. velocity
также может представлять интерес, он может дать вам указание, «нажал ли» пользователь на представление прокрутки или переместил его, остановил, а затем поднял палец.
Например, вот реализация, которая округляет целевое местоположение x
до ближайшего кратного 100, делая таким образом «страницы» шириной 100 точек.
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
targetContentOffset->x = round(targetContentOffset->x / 100.0) * 100.0;
}