10

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

4

3 回答 3

37

这个答案很晚,但希望它会帮助某人。丹,你的想法是对的,但比你拥有的更容易。只需更换

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。

于 2013-06-02T19:37:56.933 回答
4

如果我理解正确,我认为问题在于您首先必须更正滚动视图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演示应用程序中对此进行了测试,它似乎有效。试试看。

于 2012-11-27T02:20:04.507 回答
3

以防万一有人在寻找这个,这里是如何在 Swift 中完成的:

let cellFrameInSuperview = collectionView.convertRect(collectionView.cellForItemAtIndexPath(indexPath)!.frame, toView: view)
于 2016-04-07T22:11:24.723 回答