获取嵌入在滚动视图中的单元格的中心点

Posted

技术标签:

【中文标题】获取嵌入在滚动视图中的单元格的中心点【英文标题】:Get the Center Point of a Cell Embedded in Scroll View 【发布时间】:2013-07-18 14:45:24 【问题描述】:

我在滚动视图中嵌入了一个 UICollectionView:

每个白色方块都是一个集合视图单元格。用户可以水平滚动以显示其他单元格。

当用户点击一个单元格时,我创建了一个动画,该动画会导致该单元格从它自己的中心向外扩展,因为过渡到一个新的视图控制器。

代码如下:

//cell is selected:

//grab snapshot of cell
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
UIImage *cellImage = [self imageOfCollectionCell:cell]; 

//hold the snapshot in this dict    
NSMutableDictionary *cellImageDict = [[NSMutableDictionary alloc]init];
[cellImageDict setObject:cellImage forKey:SELECTED_INBOX_EMAIL_IMAGE];
[ViewControllerSnapShotDictionary sharedInstance].vcdict = nil;
[ViewControllerSnapShotDictionary sharedInstance].vcdict = cellImageDict; 

//get the center of the cell (HERE IS WHERE THE PROBLEM IS)
CGPoint cellCenter = CGPointMake(cell.center.x, cell.center.y);

//do the animation using the snapshot and cell center
[self startPinchingOutCellFromCenterPoint:cellCenter forTransitionTo:emailController withSnapShotImage:SELECTED_INBOX_EMAIL_IMAGE]; 

代码工作正常,除非集合视图已滚动。动画要求我知道单元格的中心在屏幕上的那一刻,被触摸并相对于我正在查看的视图的坐标。

例如,如果collection view没有被滚动,并且我选择了上图的center cell,center可能会返回为:

cell.center.x = 490
cell.center.y = 374

但是,如果我向右滚动,然后选择新的中心单元格,我可能会得到类似的结果:

cell.center.x = 1770
cell.center.y = 374

我的问题是,有没有更好的方法来完成我想要做的事情,或者有没有办法在单元格的中心位于 self.view 中的当前位置时获得句柄?

【问题讨论】:

【参考方案1】:

我认为这是因为中心坐标位于 collectionView 的坐标系(滚动)中。您需要将其转换为不滚动的坐标系。

试试这样的:

CGPoint realCenter = [collectionView convertPoint:cell.center 
                                     toView:collectionView.superview];

它的作用基本上是将中心从 collectionView 的坐标系转换为它的父级,它应该是固定的(不滚动)。

您甚至可以通过传递 nil 作为参数来获取屏幕(窗口)上的坐标:

CGPoint realCenter = [collectionView convertPoint:cell.center 
                                     toView:nil];

由您决定要转换到哪个坐标。

【讨论】:

以上是关于获取嵌入在滚动视图中的单元格的中心点的主要内容,如果未能解决你的问题,请参考以下文章

为啥 UICollectionView 在滚动其单元格的滚动视图后不再调用 didSelectItemAtIndexPath ?

带有自定义表格视图单元格的表格视图在滚动时消失

带有自定义 UITextView 单元格的 TableView 将导航栏滚动到屏幕外

视图中的滚动视图和滚动视图中的表格视图;我如何引用它?

当我向下滚动表格视图时,隐藏单元格的复选标记消失了

具有自我调整大小的单元格的集合视图不再可水平滚动