2014-01-07 7 views
8

Я пытаюсь осуществить фотогалерею с помощью UICollectionView. Настройка похожа на ту, что находится в этом tutorial: Ячейки размером с коллекционный вид, так что вы увидите одно изображение за раз. Пейджинг включен, поэтому вы просматриваете изображение галереи по изображению. Пока все работает нормально.scrollToItemAtIndexPath не работает должным образом

Я также хочу сохранить эту настройку, когда устройство повернуто к ландшафту. Он отлично работает в отношении размера ячейки/изображения. Но, как описано в вышеупомянутом учебном пособии, представление коллекции поворачивается в какое-то странное положение между двумя картинками.

Моя цель - получить представление коллекции для отображения одной и той же ячейки после поворота, как показано перед вращением. Как и в этом post.

Моя попытка решить эту проблему:

Перед поворотом я экономлю на indexpath текущего видимого элемента собственности следующим образом:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation  duration:(NSTimeInterval)duration { 
    NSArray *visibleItems = [self.galleryCollectionView indexPathsForVisibleItems]; 
    self.currentIndexPath = [visibleItems lastObject]; 
    [self.galleryCollectionView.collectionViewLayout invalidateLayout]; 
} 

И после поворота я стараюсь, чтобы перейти к что такой элемент:

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
[self.galleryCollectionView scrollToItemAtIndexPath:self.currentIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES]; 
} 

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

Любые идеи, что я делаю неправильно?

+0

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

+0

Вы нашли решение проблемы? –

+0

У меня такая же проблема на iOS 6. Но она исправлена ​​в iOS 7. –

ответ

2

У меня точно такая же проблема на IOS 6, и это фиксируется на прошивке 7. Вот обходной путь, который работает для меня прошивку 6.

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; 

    // workaround iOS 6 collection view rotation bug: UICollectionView is not scrolled to the correct index after rotation  
    [self.collectionView setContentOffset:[self.collectionView.collectionViewLayout layoutAttributesForItemAtIndexPath:[NSIndexPath indexPathForRow:self.currentPage inSection:0]].frame.origin animated:NO]; 
} 
Смежные вопросы