Горизонтальная прокрутка iPhone - PullRequest
2 голосов
/ 15 июля 2010

Я пытаюсь создать приложение с горизонтальной прокруткой, чтобы можно было прокручивать по горизонтали серию изображений. Я смотрел видео WWDC Session 104 по этому поводу, и, хотя они сделали интересное приложение, они очень быстро пролистали его основы.

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

Как вы, вероятно, можете сказать, я довольно новичок в этом, поэтому любая помощь будет оценена.

Ответы [ 3 ]

12 голосов
/ 15 июля 2010

Вы хотите посмотреть UIImageView . Это вид специально для хранения изображений.

Когда вы добавляете свои изображения, вы хотите установить их ректы (вероятно, используя initWithFrame: для каждого UIImageView) так:

  • первое изображение в 0,0
  • второе изображение в 320,0
  • третий - 640,0 (и т. Д.)

т.е. каждое изображение имеет 320 пикселей справа от предыдущего.

Последний шаг - установить contentSize для вашего UIScrollView - это CGSize, который описывает общий размер вида прокрутки.

Если у вас есть 3 изображения, вы должны установить его на (320 * 3) * 480, например,

myScrollView.contentSize = CGSizeMake(320*3, 480);

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

CGFloat scrollWidth = 0.f;
for (UIImage *someImage in someNSArrayWithImages) {
    UIImageView *theView = [[UIImageView alloc] initWithFrame:
        CGRectMake(scrollWidth, 0, 320.f, 480.f)];
    theView.image = someImage;
    [myScrollView addSubview:theView];
    [theView release];
    scrollWidth += 320.f;
}
myScrollView.contentSize = CGSizeMake(scrollWidth, 480.f);

Таким образом вы выстроите все в ряд и одновременно получите размер контента для вас.

Если вы хотите сделать так, чтобы представление прокрутки «интеллектуально» прокручивалось к каждому изображению и останавливалось, когда люди скользят влево / вправо, вы можете сделать myScrollView.pagingEnabled = YES.

Надеюсь, это поможет вам.

1 голос
/ 15 июля 2010

Взгляните на Пример кода Apple PageControl .Он довольно короткий и простой в использовании, поэтому вы получите суть настройки проекта, в котором загружаются несколько контроллеров представления при горизонтальном пролистывании.

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

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

Удачи!

1 голос
/ 15 июля 2010

Предполагая, что у вас есть «бесконечные» изображения, размещение их всех там во время или до времени запуска в огромном UIScrollView не будет возможным.(есть ограничение на размер UIView)

Способ, которым я решил это: создать UIScrollView, охватывающий весь экран.Его содержимое должно быть UIView шириной 3 * 320 и высотой 480, с расширением 320 пикселей влево и 320 пикселей вправо.

Поместите в него 3 объекта UIImageView, слева, посередине и справа.Установите paging = YES, чтобы uiscrollview обрезал созданные вами 3 "страницы".

Убедитесь, что ваш класс является делегатом uiscrollview, и прослушайте

-(void)scrollViewDidEndDragging:(UIScrollView*)sv willDecelerate:(BOOL)notFinished
-(void)scrollViewDidEndDecelerating:(UIScrollView*)sv
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView*)sv

иделать соответствующие переходы при попадании на границы пейджинга;сдвиньте изображения и установите ContentOffset, чтобы вы снова смотрели на центральное изображение.

Я советую сначала сделать это, а потом читать дальше ...

Тогда вы столкнетесь с ошибкойзадокументировано здесь UIScrollView - (bounces = NO), кажется, переопределяет (pagingEnabled = YES) , а здесь http://www.iphonedevsdk.com/forum/iphone-sdk-development/935-paging-uiscrollview.html,, что означает, что вы не можете отключить подпрыгивание и включить подкачку одновременно.Так что включите подпрыгивание и создайте подкласс UIScrollView, переопределяя setContentOffset там, чтобы предотвратить подпрыгивание.(если отскок действительно включен, пользователь получит довольно необычные впечатления)

...