Бесконечная горизонтальная прокрутка UIScrollView - PullRequest
5 голосов
/ 25 февраля 2012

У меня есть UIScrollView, размер контента которого составляет 1200x480.У меня есть несколько изображений, ширина которых составляет до 600. При прокрутке вправо я просто увеличиваю размер содержимого и устанавливаю смещение, чтобы все было гладко (затем я хочу добавить другие изображения, но это не важно.прямо сейчас).Таким образом, в основном, изображения, которые в данный момент находятся в окне просмотра, остаются где-то слева, и, в конце концов, они будут удалены из суперпредставления.

Теперь у меня возникает проблема при прокрутке влево.Что я делаю, я перемещаю изображения в конец размера контента (поэтому добавьте 600 к origin.x каждого вида изображения), а затем соответственно устанавливаю смещение контента.Он работает, когда палец находится на экране, а пользователь перетаскивает (scrollView.isTracking = YES).Когда пользователь прокручивает влево и отпускает (scrollView.isTracking = NO), изображения в итоге движутся слишком быстро вправо и почти мгновенно исчезают.Кто-нибудь знает, как я мог сделать так, чтобы изображения плавно перемещались и не исчезали, даже если пользователь не перетаскивал вид вручную и уже отпустил?

Вот мой код для горизонтального перетаскивания:

-(void) scrollViewDidScroll:(UIScrollView *)scrollView {
    CGPoint offset = self.scrollView.contentOffset;
    CGSize size = self.scrollView.contentSize;

    CGPoint newXY = CGPointMake(size.width-600, size.height-480);

    // this bit here allows scrolling towards the right
    if (offset.x > size.width - 320) {
        [self.scrollView setContentSize:CGSizeMake(size.width+320, size.height)];
        [self.scrollView setContentOffset: offset];
    }

    // and this is where my problem is:
    if (offset.x < 0) {
        for (UIImageView *imageView in self.scrollView.subviews) {
            CGRect frame = imageView.frame;
            [imageView setFrame:CGRectMake
                (frame.origin.x+newXY.x, frame.origin.y, 200, frame.size.height)];
        }
        [self.scrollView setContentOffset:CGPointMake(newXY.x+offset.x, offset.y)];
    } 
}

РЕДАКТИРОВАТЬ: Это сейчас работает - я посмотрел на StreetScroller, и теперь все хорошо.

Однако теперь я хочу увеличить масштаб прокрутки, но viewForZoomingInScrollView никогда не вызывается.Разве нельзя увеличить вид прокрутки с большим размером контента?

1 Ответ

5 голосов
/ 25 февраля 2012

Здесь есть несколько подходов. Просто воспользуйтесь поиском по сайту…

Если вы хотите более «официальный» пример, созданный Apple, взгляните на StreetScroller Demo . Для получения дополнительной информации об этом примере посмотрите на прошлую сессию WWDC №. 104 Продвинутые методы просмотра прокрутки .

Существует также подкласс UIScrollView на Github, который называется BAGPagingScrollView , который является пейджинговым и бесконечным, но в нем есть несколько ошибок, которые нужно исправить самостоятельно, поскольку он не находится в активной разработке (особенно 1011 * метод приводит к проблемам).

...