gpt4 book ai didi

ios - 在旋转界面方向时将 contentOffset 保持在 UICollectionView 中

转载 作者:IT老高 更新时间:2023-10-28 11:26:03 24 4
gpt4 key购买 nike

我正在尝试处理 UICollectionViewController 中的界面方向更改。我想要实现的是,我希望在界面旋转后拥有 same contentOffset。意思是,应该根据边界变化的比例来改变它。

从纵向开始,内容偏移量为 {bounds.size.width * 2, 0} ...

UICollectionView in portait

... 应该导致横向内容偏移也与 {bounds.size.width * 2, 0} (反之亦然)。

UICollectionView in landscape

计算新的偏移量不是问题,但不知道在哪里(或何时)设置它,以获得平滑的动画。我这样做是使 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 .

最佳答案

您可以在 View Controller 中执行此操作:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)

guard let collectionView = collectionView else { return }
let offset = collectionView.contentOffset
let width = collectionView.bounds.size.width

let index = round(offset.x / width)
let newOffset = CGPoint(x: index * size.width, y: offset.y)

coordinator.animate(alongsideTransition: { (context) in
collectionView.reloadData()
collectionView.setContentOffset(newOffset, animated: false)
}, completion: nil)
}

或者在布局本身中:https://stackoverflow.com/a/54868999/308315

关于ios - 在旋转界面方向时将 contentOffset 保持在 UICollectionView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13490065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com