Как остановить UIScrollView в определенной точке? - PullRequest
10 голосов
/ 25 января 2012

Как вы остановите UIScrollView в определенной точке?То есть установить конечную позицию UIScrollView после взаимодействия с пользователем?

В частности, как вы можете установить интервалы по горизонтали UIScrollView, чтобы он остановился только в этих точках?

Надеюсь, то, что я сказал, достаточно ясно.

Ответы [ 9 ]

33 голосов
/ 27 января 2012

Взгляните на метод scrollViewWillEndDragging:withVelocity:targetContentOffset: из UIScrollViewDelegate. Он предназначен для того, чтобы делать именно то, что вам нужно.

Представление прокрутки отправляет это сообщение своему делегату, когда пользователь заканчивает перетаскивание представления прокрутки. Третий параметр (targetContentOffset) передается в виде указателя, и вы можете изменить его значение, чтобы изменить место остановки просмотра прокрутки.

iOS 5.0 и более поздние версии.

11 голосов
/ 25 января 2012

У вас есть 3 варианта:

  1. Вы можете сделать это, используя pagingEnabled.

  2. ИспользованиеsetContentOffset: animated: в методе UIScrollViewDelegate scrollViewDidEndDecelerating:

  3. Создайте собственный вид прокрутки с помощью touchesBegan, touchesMoved и touchesEnded и экстраполируйте насоздать импульс с соответствующей конечной точкой
4 голосов
/ 29 июля 2014

Я нашел то, что работает для меня. Это позволит вам прокрутить до точки 0,0, но не дальше:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.x <= -1) {
        [scrollView setScrollEnabled:NO];
        [self.scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
        [scrollView setScrollEnabled:YES];
    }
}

Вы можете сделать то же самое для верхней, нижней или правой (х или у)

2 голосов
/ 22 декабря 2016

Это будет отлично работать:

override func scrollViewDidScroll(scrollView: UIScrollView) {
    if scrollView.contentOffset.y > CERTAIN_POINT {
        scrollView.scrollEnabled = false
        scrollView.scrollEnabled = true
    }
}
2 голосов
/ 11 марта 2015

Для тех, кому нужно установить targetContentOffset в Swift, как rob mayoff говорит в своем превосходном ответе выше, это способ:

func scrollViewWillEndDragging(scrollView: UIScrollView!, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    targetContentOffset.memory.y = x 
}
1 голос
/ 25 января 2012

, чтобы достичь этого, вам нужно включить просмотр прокрутки.

Например:

[scrollView setContentSize:CGSizeMake(640, 161)];
[scrollView setPagingEnabled:YES];

здесь ширина прокрутки равна 640 (удвоенная ширина экрана iphone), еслиПейджинг включен, он будет делить его поровну в зависимости от ширины.Поэтому при прокрутке до этой позиции она остановится на определенном смещении.

0 голосов
/ 19 февраля 2014

Для вертикальной прокрутки я использую это. Отлично работал

  • (void) scrollViewDidScroll: (UIScrollView *) scrollView { self.scrollView.contentOffset = CGPointMake (0, wantedPoint.y); }
0 голосов
/ 25 января 2012

я думаю, что это может помочь вам проверить этот API, предоставленный яблоком

  • (void) scrollRectToVisible: (CGRect) rect animated: (BOOL) animated

And appleясно сказано об этом Этот метод прокручивает представление содержимого так, чтобы область, определенная прямоугольником, была просто видна внутри представления прокрутки.Если область уже видна, метод ничего не делает.

0 голосов
/ 25 января 2012
[scrollView setContentSize:CGSizeMake(640, 161)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...