UICollectionViewControllerでインターフェイスの向きの変更を処理しようとしています。私が達成しようとしているのは、インターフェイスの回転後に同じcontentOffsetを設定したいということです。つまり、境界の変化の比率に応じて変更する必要があります。
{ bounds.size.width * 2、0}のコンテンツオフセットで縦向きから開始…</ p>
…また、{ 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の私のプロジェクトにあります。