Как иметь неограниченный UIScrollView - PullRequest
3 голосов
/ 19 февраля 2010

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

Теперь мне нужно добавить туда представления, чтобы пометить даты при их прокрутке.Мой второй вопрос - как реализовать такое представление в виде прокрутки.Я мог бы иметь длинное представление, в 3 или 4 раза шире, чем кадр прокрутки, и просто перемещать и обновлять его каждый раз, когда прокрутка останавливается, имитируя непрерывный бар.Любые другие идеи?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 17 мая 2012

Я знаю, что прошло много времени с тех пор, как вы разместили этот вопрос, но только для справки в будущем:

На WWDC 2011 Apple выступила с великолепной презентацией под названием «Сессия 104 - Расширенные методы просмотра с прокруткой».Видео можно посмотреть на developer.apple.com или в iTunes.

Основная концепция:

1 - начните с подпредставления, которое превышает границы вашего scrollView.

2 - В -layoutSubViews из scrollView вы проверяете, превышает ли параметр contentOffset в направлении, которое вы хотите прокручивать бесконечно, какой-то заданный вами порог (это не должно быть каким-либо конкретным значением, это может быть 1 точка вкрайность).

3 - в этом случае вы сбрасываете contentOffset в ноль и настраиваете кадр подпредставления на ту же величину.

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

0 голосов
/ 04 февраля 2011

Зацикливание UIScrollView по горизонтали звучит так же, как проблема, надеюсь, мои комментарии там также могут дать вам некоторые идеи.

0 голосов
/ 17 сентября 2011

Создание «бесконечного» прокрутки не работает - требования к памяти становятся слишком большими.Лучший способ сделать это - подделать его.

3 screen scrollview:

|---|---|---|
|   |   |   | 
|---|---|---|

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

Аналогично, когда пользователь прокручивает обратно до первой трети, измените положение прокрутки на центральную треть и переместитевесь контент справа.

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

0 голосов
/ 04 февраля 2011

Не уверен, что это может быть ... Вы можете попробовать CGSizeZero

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html#//apple_ref/occ/instp/UIScrollView/contentSize

   contentSize

    The size of the content view. @property(nonatomic) CGSize contentSize Discussion

    The unit of size is points. The default size is CGSizeZero.

Реальный вопрос в том, действительно ли вы хотите «бесконечное» или же вы хотите в основном бесконечное и просто сделать представление безбожно большим? Или вы хотите авто-изменение размера.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...