Я намагаюся обробляти зміни орієнтації інтерфейсу в UICollectionViewController. Я намагаюся досягти того, щоб я хотів мати однаковий contentOffset після обертання інтерфейсу. Це означає, що його слід змінювати відповідно до співвідношення змін меж.
Початок у портреті із зміщенням вмісту { bounds.size.width * 2, 0}…
... має призвести до зміщення вмісту в альбомному режимі також із { bounds.size.width * 2, 0} (і навпаки).
Обчислення нового зміщення не є проблемою, але не знаю, де (або коли) його встановити, щоб отримати плавну анімацію. Те, що я роблю за тариф, - це скасування макета willRotateToInterfaceOrientation:duration:
та скидання зміщення змісту в didRotateFromInterfaceOrientation:
:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration;
{
self.scrollPositionBeforeRotation = CGPointMake(self.collectionView.contentOffset.x / self.collectionView.contentSize.width,
self.collectionView.contentOffset.y / self.collectionView.contentSize.height);
[self.collectionView.collectionViewLayout invalidateLayout];
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
{
CGPoint newContentOffset = CGPointMake(self.scrollPositionBeforeRotation.x * self.collectionView.contentSize.width,
self.scrollPositionBeforeRotation.y * self.collectionView.contentSize.height);
[self.collectionView newContentOffset animated:YES];
}
Це змінює зміщення вмісту після обертання.
Як я можу встановити його під час обертання? Я намагався встановити зміщення нового вмісту, willAnimateRotationToInterfaceOrientation:duration:
але це призводить до дуже дивної поведінки.
Приклад можна знайти в моєму проекті на GitHub .