Jak obrócić UICollectionView podobną do aplikacji do zdjęć i zachować bieżący widok?
Mam widok galerii zdjęć, który używaUICollectionView
zUICollectionViewFlowLayout
, to mapagingEnabled
i przewija w poziomie pokazując tylko jeden widok naraz.
Działa świetnie, dopóki nie spróbuję go obrócić ...
Kiedy obracam urządzenie, wwillRotateToInterfaceOrientation:duration:
AktualizujęcollectionView.contentOffset
tak więc pozostaje na właściwym elemencie i zmieniam rozmiar obecnej komórki, tak aby zmieniała się w nowe wymiary.Problem polega na animacji między dwoma stanami, animacja „poprzedniej” orientacjiz lewego górnego rogu I rzuca do widoku inne komórki. Co robię źle, tak że widok animowany poza ekranem to FUBAR?
Oto jak to wygląda w akcji:
http://www.smugmug.com/gallery/n-3F9kD/i-BwzRzRf/A (zignoruj przerywany film, czyli błąd Quicktime: p)
Tutaj jest mójwillAnimateRotationToInterfaceOrientation:duration
:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
// Update the flowLayout's size to the new orientation's 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's 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;
}
O ile mi wiadomo, nie mogę znaleźć żadnego przykładowego kodu, który ilustruje sposób tworzenia widoku kolekcji w stylu „galerii zdjęć”, który obraca się z wdziękiem.