我试图在 UICollectionViewController 中处理界面方向的更改。我想要实现的是,在接口旋转之后使用 一样 contentOffset。也就是说,它应该随着边界变化的比例而变化。
以{ 边界,尺寸,宽度 * 2,0}的内容偏移量开始纵向..。
... 应该导致内容在横向偏移也{ 边界,尺寸,宽度 * 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项目中找到。