屏幕旋转后如何在 UICollectionView 中跟踪单元格的移动

Posted

技术标签:

【中文标题】屏幕旋转后如何在 UICollectionView 中跟踪单元格的移动【英文标题】:How to track movement of a cell in UICollectionView after screen rotation 【发布时间】:2013-10-25 18:55:12 【问题描述】:

我有一个 UICollectionView。当我触摸其中一个单元格时,我会从其位置显示一个弹出视图,其中箭头指向该单元格,其中包含有关该单元格的一些额外信息。

当我旋转设备时,UICollectionView 会自动重新定位其单元格。

我想做的是自动重新定位我的弹出视图,使其指向与以前相同的单元格(现在位于 UICollectionView 中的不同位置)

我遇到的问题是跟踪(找出)我的单元格的新位置,因此我可以手动表示单元格新位置的弹出视图。

我尝试为单元格附加和存储一个“idString”以进行比较,但这出于某种原因返回了屏幕旋转之前单元格的旧框架

NSArray* visibleCells = [UIAppDelegate.ocollectionView visibleCells];

for (UICollectionViewCell *cell in visibleCells) 
    if ([cell.idString isEqualToString:self.idString] ) 
        NSLog (@"we have a match!!! %@", cell);
        CGRect rectInCollectionView = cell.frame;
        rect = [UIAppDelegate.collectionView convertRect:rectInCollectionView toView:[UIAppDelegate.collectionView superview]];
    

任何想法表示赞赏。谢谢。

【问题讨论】:

【参考方案1】:

这段代码放在哪里?我想它应该放在这样的委托方法上:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;

所以UICollectionView 重新绘制了它的新单元格的位置。

【讨论】:

谢谢。我从包含 UICollection 视图的 UIViewController 的 didRotateFromInterfaceOrientation 获取单元格的 frame 属性,但在实现 0.01 秒的延迟之前,我仍然得到旧框架。是否有 UICollectionView 委托方法可以告诉我它在旋转后何时完成重绘?我找不到。

以上是关于屏幕旋转后如何在 UICollectionView 中跟踪单元格的移动的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 不会在屏幕旋转时更新其布局

旋转后在 UICollectionView 中保留第一个可见项目

如何在自定义 UICollectionView 的旋转后触发 drawrect?

旋转后如何调整 UICollectionView contentOffset?

设备旋转时如何自动调整 UICollectionView 的大小?

设备旋转后的 UICollectionView contentOffset