私の問題の簡単な要約:
iOS 7 で View Controller Transitioning API を使用して、タップすると uicollectionview のセルをフルスクリーン ビューに拡張し、閉じると元の座標に戻るカスタム トランジションを作成しています。
写真アプリや Facebook の機能に似ています。
全画面表示の表示と非表示を同じ方向に維持している限り、両方の方向でうまく機能します。
閉じる前に全画面表示で向きを変更すると失敗します。
いくつかの詳細:
collectionView を含む View1 からフルスクリーン ビューである View2 に移動するために、navigationController を使用しています。
View1 は UINavigationControllerDelegate プロトコルを実装し、navigationController:animationControllerForOperation:fromViewController:toViewController: メソッドで、操作が「プッシュ」の場合にアニメーションを開始する必要がある座標を計算し、同様に、操作が「プッシュ」の場合にアニメーションを終了する必要がある座標を計算します。アニメーションを行う UIViewControllerAnimatedTransitioning クラスを返す前の「ポップ」です。
次の方法で、View1 の座標系で開始フレームと終了フレームを計算します。
選択したセルを取得します。
PhotoCell *cell = (PhotoCell *) [self.collectionView cellForItemAtIndexPath:selectedIndexPath];
次の方法で、セルのフレームを View1 の座標系に変換します。
self.originatingFrame = [cell.contentView.superView convertRect:cell.contentView.frame toView:self.view];
プッシュ操作とポップ操作の間で回転を一定に保つと、この計算は両方の回で同じ座標を返し、結果は期待どおりになります。アニメーションはセルのフレームから開始され、同じセルに縮小されます。
でも; プッシュ操作とポップ操作の間でデバイスを回転させると、誤った結果が得られます。ポップ中に計算された座標は、プッシュ中とまったく同じです。View1 と collectionView がまだ回転していないかのようです。したがって、アニメーションは、デバイスが回転していなかった場合にセルがあった場所で終了します。
ポップ操作中の回転の変化を考慮して、選択したセルの座標を計算するにはどうすればよいですか?
ありがとう