我正在尝试在UICollectionViewController中处理界面方向的更改。我的目标是希望在界面旋转后,相同的contentOffset保持不变,也就是说,它应该根据bounds的比例进行相应的更改。
从纵向开始,内容偏移为{ 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上找到我的项目的示例。
floor
函数而不是round
吗? - MariocollectionView.collectionViewLayout.invalidateLayout()
来代替调用collectionView.reloadData()
。 - dronpopdev