Как я могу позволить UIScrollView (pagingEnabled) перемещать 1,2 страницы каждый раз? - PullRequest
0 голосов
/ 08 сентября 2011

Хорошо.вот история:

У меня UIWebView на весь экран, ширина = 768

Он загружает несколько изображений, и эти изображения находятся в одной строке, что означает, что UIWebView будет прокручиваться только горизонтально.

Теперь я установил для UIScrollView внутри UIWebView значение pagingEnabled = YES.Таким образом, прокрутка в UIWebView будет перемещаться страница за страницей.

Проблема в том, что ширина каждого изображения составляет около 900. Я не буду уменьшать их, и если я буду прокручивать UIWebView, начиная со 2-й страницы, всегда132 пункта предыдущего изображения покажет.Это не очень хорошо для меня.

Итак, как я могу манипулировать UIWebView или UIScrollView внутри UIWebView, чтобы каждая прокрутка переместила страницу на 900 точек, если ширина кадра представления 768?

Ограничения:

  1. Я не могу изменить его содержимоеРазмер

  2. Я не могу изменить его границыили кадр

Я говорю эти ограничения, потому что UIWebView изменит их по своему собственному назначению при загрузке содержимого.

Кто-нибудь хотел бы присоединиться к этому мозговому штурму?

Спасибо

1 Ответ

1 голос
/ 05 октября 2011

Я думаю, вам понадобится установить делегат UIScrollView, который отслеживает касания начала и конца. Точнее говоря, scrollViewDidEndDragging: willDecelerate - это то, что, я думаю, вам нужно использовать, поскольку оно срабатывает в тот момент, когда пользователь поднимает руку с устройства.

Во-первых, pagingEnabled = НЕТ, кажется очевидным, нам придется контролировать наш собственный пейджинг. Который, я не чувствую, слишком жесток. Отследите направление прокрутки в scrollViewDidScroll:, чтобы у нас был глобальный набор: BOOL isGoingRight = YES или NO (NO означает, что последнее движение было слева) float PAGESIZE = 900,0;

Вот как будет выглядеть мой метод делегата scrollview, который обрабатывает пейджинг.

- (void) scrollViewDidEndDragging:(UIScrollView*)_scrollView willDecelerate:(BOOL)willDecelerate {
    float offsetProportion = _scrollView.contentOffset.x/_scrollView.frame.size.width;
    //depending upon our direction, round up or down
    int page = isGoingRight? ceilf(offsetProportion): floorf(offsetProportion);
    //manually finish the scroll
    [_scrollView scrollRectToVisible:CGRectMake(page*PAGESIZE, 0, _scrollView.frame.size.width, _scrollView.frame.size.height) animated:YES];
}

Я не проверял это, вы можете или не должны отключать касания в точках.

...