UIScrollView и scrollRectToVisible: animated: - PullRequest
       0

UIScrollView и scrollRectToVisible: animated:

4 голосов
/ 16 сентября 2010

У меня есть страница UIScrollView, которая просматривает несколько полноэкранных изображений.Я разбиваю страницы на листы, ставлю в очередь и освобождаю UIViews динамически, когда страница прокрутки просматривает коллекцию изображений на основе примера кода Apple.

У меня есть кнопка на панели инструментов, вызывающая scrollRectToVisible: animated: для перемещения UIScrollViewк конкретному изображению.Это работает отлично.

Проблема состоит в том, что если вы затем делаете одно касание в UIScrollView, он прокручивает страницу, которая отображалась до нажатия кнопки, и scrollRectToVisible: animated: вызов метода прокручивал представление.

Если ваше касание движется, UIScrollView прокручивается должным образом, и последующие касания не приводят к тому, что UIScrollView возвращается к исходной странице.

Как предотвратить это поведение?

Спасибо

JK

Ответы [ 2 ]

12 голосов
/ 16 сентября 2010

Вам нужно использовать смещение содержимого, а не scrollRectToVisible, например:

[pagingScrollView setContentOffset:[self offsetForPageAtIndex:page] animated:YES];                                                                

где offsetForPageAtIndex выглядит так:

- (CGPoint)offsetForPageAtIndex:(NSUInteger)index {                                                                                                        
    CGRect pagingScrollViewFrame = [self frameForPagingScrollView];                                                                                        

    CGPoint offset;                                                                                                                                        

    offset.x = (pagingScrollViewFrame.size.width * index);                                                                                                 
    offset.y = 0;                                                                                                                                          
    return offset;                                                                                                                                         
}                                                                                                                                       

Это основано на примере кода Apple "фотокроллер" из WWDC 2010, который имеет frameForPagingScrollView, который выглядит следующим образом:

- (CGRect)frameForPagingScrollView {
    CGRect frame = [[UIScreen mainScreen] bounds];
    frame.origin.x -= PADDING;
    frame.size.width += (2 * PADDING);
    return frame;
}

Полная копия этой версии примера кода Photoscroller находится здесь:

https://github.com/jogu/WWDC-2010/tree/master/PhotoScroller

3 голосов
/ 15 октября 2010

Хотя ответ Джозефа дал мне правильный путь, у меня было странное поведение при вращении устройства.Я обнаружил, что использование offset.x = (pagingScrollView.bounds.size.width * index); вместо этого работает лучше.

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