У меня есть представление фотогалереи, которое использует UICollectionView
с UICollectionViewFlowLayout
, оно имеет pagingEnabled
и прокручивает горизонтально показ только одного представления за раз.
Отлично работает, пока я не попытаюсь повернуть его...
Когда я поворачиваю устройство, в willRotateToInterfaceOrientation:duration:
я обновляю collectionView.contentOffset
, чтобы он оставался на нужном элементе, и я изменяю размер currentCell, чтобы он анимировался в новых измерениях. Проблема заключается в анимации между двумя состояниями, "предыдущая" анимированная ориентация в верхнем левом углу И переходит в представление других ячеек. Что я делаю неправильно, так что вид анимированный с экрана FUBAR?
Вот как это выглядит в действии:
http://www.smugmug.com/gallery/n-3F9kD/i-BwzRzRf/A (игнорируйте прерывистое видео, это ошибка Quicktime: p)
Вот мой willAnimateRotationToInterfaceOrientation:duration
:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
// Update the flowLayout size to the new orientation size
UICollectionViewFlowLayout *flow = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {
flow.itemSize = CGSizeMake(self.collectionView.frame.size.width, self.collectionView.frame.size.height);
} else {
flow.itemSize = CGSizeMake(self.collectionView.frame.size.width, self.collectionView.frame.size.height);
}
self.collectionView.collectionViewLayout = flow;
[self.collectionView.collectionViewLayout invalidateLayout];
// Get the currently visible cell
PreviewCellView *currentCell = (PreviewCellView*)[self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForRow:_currentIndex inSection:0]];
// Resize the currently index to the new flow itemSize
CGRect frame = currentCell.frame;
frame.size = flow.itemSize;
currentCell.frame = frame;
// Keep the collection view centered by updating the content offset
CGPoint newContentOffset = CGPointMake(_currentIndex * frame.size.width, 0);
self.collectionView.contentOffset = newContentOffset;
}
Насколько мне известно, я не могу найти какой-либо образец кода в любом месте, что иллюстрирует, как сделать "коллекцию" стиля коллекции "фото галерея", которая грациозно вращается.