Бесконечный iPad Swipe? - PullRequest
       17

Бесконечный iPad Swipe?

0 голосов
/ 21 апреля 2010

Я хочу реализовать представление ipad, где я анализирую xml-файл и помещаю записи рядом в «бесконечном» представлении ipad, так что вам придется пролистывать его влево и вправо. Может кто-нибудь сказать мне, как я могу это реализовать? какой тип представления мне нужно использовать?

заранее спасибо

привет

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

Использование действительно большого contentSize - не лучший способ. contentSize по-прежнему использует фиксированные типы данных, и если вы прокрутите достаточно долго, они переполнятся, и в лучшем случае ваш рисунок станет бесполезным. В худшем случае ваше приложение вылетает.

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

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

A B C A B C A B C ...

Внутренне, вы собираетесь расположить их так:

C A B C

Потому что, когда A видна, вы можете видеть часть C, если вы проводите вправо, или часть B, если вы проводите влево.

Ваши UIScrollView contentOffset - это ваше окно. В то время как contentSize охватывает ширину всех четырех объектов (C A B C), внутренне вы собираетесь ограничить это до 75% фактической ширины. Когда пользователь прокручивает влево и вправо, вы настраиваете contentOffset так, чтобы оно никогда не было отрицательным или превышало 75% от contentSize.width. Это делается внутри вашего делегата, в scrollViewDidScroll:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    while (scrollView.contentOffset.x < 0)
        scrollView.contentOffset.x += constrainedContentSize.width;
    while (scrollView.contentOffset.x > constrainedContentSize.width)
        scrollView.contentOffset.x -= constrainedContentSize.width;

    // ...
}

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

Это будет гораздо эффективнее, чем постоянное освобождение и воссоздание представлений.

1 голос
/ 21 апреля 2010

Вы используете UIScrollView с включенной подкачкой. Основным будет установка myscrollView.contentSize на общую ширину всех ваших страниц, но создание отдельных страниц точно в срок по мере прокрутки (см. Документацию UIScrollViewDelegate); Другими словами, вы не хотите, чтобы на самом деле десятки или больше просмотров занимали память, когда все, что вам нужно, это три - текущий вид и плюс предыдущий и следующий представления. Этот пример кода от Apple должен помочь вам начать: http://developer.apple.com/iphone/library/samplecode/Scrolling/Introduction/Intro.html

...