UIScrollView с прокруткой "Циркуляр"

Я пытаюсь сделать прокрутку "Циркуляр" в моем UIScrollView, но безуспешно.

Что я хочу сделать: если uiscrollview достигнет конца, он должен перейти в начало если uiscrollview при запуске и перемещении назад, он должен перейти к концу

Добавление scrollview не является хорошим способом в моей ситуации (другие методы должны получить "id страницы" )

Есть ли у вас идеи?

Ответ 1

Я реализовал этот метод, но для него требуется поддержка подкачки. Допустим, у вас есть пять элементов A,B,C,D and E. Когда вы настраиваете свое представление, вы добавляете последний элемент в начало и первый элемент в конец и корректируете смещение содержимого для просмотра первого элемента, например, это E,[A],B,C,D,E,A. В UIScrollViewDelegate проверьте, достиг ли пользователь любого конца, и переместите анимацию смещения без на другой конец.

Представьте, что [] указывает отображаемое представление:

E,A,B,C,[D],E,A

Пользователь щелкает вправо

E,A,B,C,D,[E],A

Пользователь щелкает вправо

E,A,B,C,D,E,[A]

Затем автоматически установите смещение содержимого во второй элемент

E,[A],B,C,D,E,A

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

E,A,[B],C,D,E,A


Update

Я загрузил полную реализацию этого алгоритма. Это очень сложный класс, поскольку он также имеет выбор по клику, бесконечную круговую прокрутку и повторное использование ячеек. Вы можете использовать код как есть, изменить его или извлечь код, который вам нужен. Самый интересный код - в классе TCHorizontalSelectorView.

Ссылка на файл

Наслаждайтесь!


Обновление 2

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

Ответ 2

У Apple есть Скриншот Street Scrolller, который, как представляется, имеет именно то, что вы хотите.

Там также video от WWDC 2011, который демонстрирует их демоверсию.;) Они покрывают бесконечную прокрутку сначала в видео.

Ответ 3

Попробуйте использовать следующий код.

Пример кода.

- (void)scrollViewDidEndDecelerating:(UIScrollView *)sender 
    {

        if (scrollView.contentOffset.x == 0) {
            // user is scrolling to the left from image 1 to image n(last image).
            // reposition offset to show image 10 that is on the right in the scroll view
            [scrollView scrollRectToVisible:CGRectMake(4000,0,320,480) animated:NO];// you can define your `contensize` for scrollview
        }
        else if (scrollView.contentOffset.x == 4320) {
            // user is scrolling to the right from image n(last image) to image 1.
            // reposition offset to show image 1 that is on the left in the scroll view
            [scrollView scrollRectToVisible:CGRectMake(320,0,320,480) animated:NO];
        }
    }

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