我正在尝试处理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上的项目中找到一个示例。