Как создать UIScrollView с бесконечной прокруткой?

  1. У меня есть UIScrollView размером 320 * 460 и размером 1024 * 1024.
  2. Я могу разместить в нем 25 изображений размером 256 * 256 с 13-м изображением, показанным в центре экрана, когда оно загружается с кусочками окружающих изображений вокруг него.
  3. Когда я смахиваю в любую сторону, я хочу, чтобы он выглядел так же, как mapView. С появлением и показом новых изображений.

Как мне это сделать?


person wolverine    schedule 04.12.2009    source источник
comment
Возможно, это дубликат stackoverflow.com/questions/1710781/ и stackoverflow.com/ вопросы / 1493950 /. У последнего вопроса есть работоспособное решение.   -  person Brad Larson    schedule 06.12.2009


Ответы (3)


Это очень просто и несколько сложно ...

Вам не нужно определять конкретный размер для ScrollView .....

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

//#define SCROLLVIEW_CONTENT_HEIGHT 460

//#define SCROLLVIEW_CONTENT_WIDTH  320

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

просто установите высоту ScrollView динамически в соответствии с объектами, добавленными в ScrollView ....

Для этого не нужно устанавливать предопределенную высоту ... возьмите динамическую высоту ....

scrollview.contentSize = CGSizeMake(320, txtView.contentSize.height+450);
 CGPoint topOffset = CGPointMake(0,0);
 [scrollview setContentOffset:topOffset animated:YES];

Надеюсь, это сработает для вас ..

Удачи :)

person Ajay Sharma    schedule 22.11.2010

Ознакомьтесь с образцом кода под названием «Мозаика». Возможно, это то, что вы ищете.

person Jessedc    schedule 04.12.2009
comment
Я проверил это. Но нет, это не бесконечная прокрутка. - person wolverine; 04.12.2009

Когда прокрутка останавливается, не могли бы вы просто отрегулировать границы так, чтобы теперь вы «повторно центрировались» с вашим новым смещением?

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

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

person Alex Reynolds    schedule 04.12.2009
comment
Хорошо, одно сомнение. В том, что я делаю, после размещения каждого изображения я освобождаю его память. Когда scrollView загружается, он показывает все эти изображения. Но, как вы сказали, когда я делаю тайлинг, если я попытаюсь кэшировать некоторые из этих изображений, не вызовет ли это для меня проблем? - person wolverine; 04.12.2009
comment
Я не уверен, что вы имеете в виду, но вам, вероятно, следует выпустить изображение, когда оно выйдет за новые границы, добавив новые ссылки на плитки изображения по мере необходимости. - person Alex Reynolds; 04.12.2009
comment
Я по-прежнему буду настаивать на том, чтобы вы посмотрели на пример кода Tiling и изучили все тонкости. Как отмечает Алекс, «бесконечная прокрутка», которую вы ищете, - это скорее визуальный эффект, чем функция UIScrollView. - person Jessedc; 05.12.2009
comment
Как я уже упоминал в комментарии к stackoverflow.com/questions/1493950/ setContentOffset отменяет любую прокрутку, поэтому на первый взгляд этот подход не работает. - person Grumdrig; 06.04.2010
comment
Кажется, setContentOffset:animated: отменяет текущую прокрутку, но не _2 _... Переопределение setContentOffset: в потомке UIScrollView и настройка смещения работает! (по крайней мере, в iOS SDK 4.3) - person Damien Debin; 30.06.2011