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 ではなく、セルで convert メソッドを呼び出していたことです。

于 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デモ アプリの 1 つでこれをテストしたところ、動作するようです。試してみる。

于 2012-11-27T02:20:04.507 に答える
3

これを探している人がいる場合に備えて、Swiftで行う方法は次のとおりです。

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