如何找到相对于App Window的UICollectionViewCell坐标

时间:2012-11-25 18:44:47

标签: objective-c ios xcode uicollectionview uicollectionviewcell

是否可以将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。任何帮助都会非常感谢。

3 个答案:

答案 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,这很容易做到,因为UICollectionViewUIScrollView的子类

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)