是否可以将UICollectionViewCell's
坐标从相对于UICollectionView
转换为相对于superview
?到目前为止,触摸到UICollectionViewCell's
时,我无法翻译superview
坐标。这是我到目前为止所尝试的内容:
- (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
。任何帮助都会非常感谢。
答案 0 :(得分:34)
这个答案很晚,但希望它会对某人有所帮助。 丹,你有正确的想法,但你拥有的东西更容易。只需替换
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];
问题是你在单元格上调用convert方法,而不是collectionView。
答案 1 :(得分:3)
如果我理解正确,我认为问题是您首先必须更正滚动视图的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
演示应用中对此进行了测试,但似乎有效。试一试。
答案 2 :(得分:1)
如果有人在寻找这个,以下是如何在Swift中完成的事情:
let cellFrameInSuperview = collectionView.convertRect(collectionView.cellForItemAtIndexPath(indexPath)!.frame, toView: view)