スクロール ビューに埋め込まれた UICollectionView があります。
それぞれの白い四角は、コレクション ビュー セルです。ユーザーは水平方向にスクロールして、追加のセルを表示できます。
ユーザーがセルをクリックすると、新しいView Controllerへの遷移が行われるときに、そのセルがその中心から外側に拡大するアニメーションを作成しました。
コードは次のとおりです。
//cell is selected:
//grab snapshot of cell
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
UIImage *cellImage = [self imageOfCollectionCell:cell];
//hold the snapshot in this dict
NSMutableDictionary *cellImageDict = [[NSMutableDictionary alloc]init];
[cellImageDict setObject:cellImage forKey:SELECTED_INBOX_EMAIL_IMAGE];
[ViewControllerSnapShotDictionary sharedInstance].vcdict = nil;
[ViewControllerSnapShotDictionary sharedInstance].vcdict = cellImageDict;
//get the center of the cell (HERE IS WHERE THE PROBLEM IS)
CGPoint cellCenter = CGPointMake(cell.center.x, cell.center.y);
//do the animation using the snapshot and cell center
[self startPinchingOutCellFromCenterPoint:cellCenter forTransitionTo:emailController withSnapShotImage:SELECTED_INBOX_EMAIL_IMAGE];
コレクションビューがスクロールされている場合を除いて、コードは正常に機能します。アニメーションでは、セルが画面上にある瞬間にセルの中心がどこにあるかを知っている必要があります。タッチされ、見ているビューの座標に相対的です。
たとえば、コレクション ビューがスクロールされていない場合、上の画像の中央のセルを選択すると、中央は次のように返される可能性があります。
cell.center.x = 490
cell.center.y = 374
ただし、右にスクロールして新しい中央のセルを選択すると、次のようになります。
cell.center.x = 1770
cell.center.y = 374
私の質問は、私がやろうとしていることを達成するためのより良い方法はありますか、それともセルの中心がセルの現在の位置にあるときにハンドルを取得する方法はありますか?