2010-09-16 2 views
4

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

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

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

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

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

Благодаря

Ю.К.

ответ

12

Вы должны использовать содержание смещения, а не 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 «photocroller» от 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

+0

Спасибо, Иосиф. Это сработало отлично. Я уже использовал frameForPagingScrollView, поэтому мне просто пришлось добавить метод offsetForPageAtIndex и отказаться от вызова метода и вуаля! – Alpinista

+0

@JosephH, Учтите поделиться ссылкой на реализацию 'frameForPagingScrollView'? Не удалось найти. –

+0

@lulianonofrei Я добавил код и ссылку на полный образец к моему ответу. – JosephH

3

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

Смежные вопросы