如何找到 UICollectionViewCell 相对于应用程序窗口的坐标
Posted
技术标签:
【中文标题】如何找到 UICollectionViewCell 相对于应用程序窗口的坐标【英文标题】:How to find a UICollectionViewCell's coordinates relative to the App Window 【发布时间】:2012-11-25 18:44:46 【问题描述】:是否可以将UICollectionViewCell's
坐标从相对于UICollectionView
转换为相对于superview
?到目前为止,当触摸到superview
时,我无法翻译UICollectionViewCell's
坐标。到目前为止,这是我尝试过的:
- (void)collectionView:(UICollectionView *)collectionView
didSelectItemAtIndexPath:(NSIndexPath *)indexPath
UICollectionViewCell *cell =
[collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCell"
forIndexPath:indexPath];
CGRect frame = CGRectMake(0.0,
0.0,
cell.frame.size.width,
cell.frame.size.height);
frame.origin = [cell convertPoint:cell.frame.origin
toView:self.view];
我想创建一个新框架,该框架源自视图上单元格的位置,而不是UICollectionView
。任何帮助都会非常感谢。
【问题讨论】:
上面的代码给你什么结果?那你用框架做什么呢? 生成的框架给了我一个相对于 UICollectionView 原点的原点。例如,如果一个单元格在向左滚动 5000 点后被触摸,则转换后的帧原点为 5000, 0。 计算完位置后,我想将坐标传递给子视图以显示在触摸单元格的顶部。 【参考方案1】:这个答案很晚,但希望它会对某人有所帮助。 丹,你的想法是对的,但比你拥有的更容易。直接替换
CGRect frame = CGRectMake(0.0, 0.0, cell.frame.size.width, cell.frame.size.height);
frame.origin = [cell convertPoint:cell.frame.origin toView:self.view];
与
CGRect frame = [collectionView convertRect:cell.frame toView:self.view];
问题是您在单元格上调用转换方法,而不是在 collectionView 上。
【讨论】:
完美。在此之前,我认真地尝试了其他 50 件事。谢谢。 #latenightprogramming 哇,谢谢!我一直试图只调用 convertTo() 而不在某个对象上调用它,不知道为什么它不起作用。傻我哈哈!【参考方案2】:如果我理解正确,我认为问题在于您首先必须更正滚动视图的contentOffset
,这很容易做到,因为UICollectionView
是UIScrollView
的子类。
CGRect frame = CGRectMake(0.0,
0.0,
cell.frame.size.width,
cell.frame.size.height);
CGPoint correctedOffset =
CGPointMake(cell.frame.origin.x - collectionView.contentOffset.x,
cell.frame.origin.y - collectionView.contentOffset.y);
frame.origin = [cell convertPoint:correctedOffset toView:self.view];
我在我的一个UICollectionView
演示应用程序中对此进行了测试,它似乎有效。试试看吧。
【讨论】:
【参考方案3】:以防万一有人在寻找这个,这里是如何在 Swift 中完成的:
let cellFrameInSuperview = collectionView.convertRect(collectionView.cellForItemAtIndexPath(indexPath)!.frame, toView: view)
【讨论】:
以上是关于如何找到 UICollectionViewCell 相对于应用程序窗口的坐标的主要内容,如果未能解决你的问题,请参考以下文章
如何设置 UICollectionViewCell 的位置?
如何在 UICollectionViewCell 上设置 UILabel?