Facebook アプリでは、フィードで写真をタップして表示すると、いくつかのことが起こります。
画像は、テーブルビュー内の現在の位置に関係なく、画面の中央にアニメーション化/移動します (中央、画面の一部から下、上など)。
画像が画面の中央に移動すると、テーブル ビューの残りの部分がフェードアウトします (アルファ = 0)。
画像を上下にドラッグすると、テーブルビューのアルファは、画面の中心からの画像のオフセットに比例して復元されます(私は思う)
この時点で、以前は画像があった場所であるフィードが空になっていることに気付くでしょう (その画像を前に「持ってきた」という印象を与えます)。画像を上下にドラッグするとこれが表示され、画像の後ろにフィード/テーブル ビューが表示されます。
#2に従って、画像がすでに比例している場合(つまり、フィード/テーブルビューの画像のプレビューがトリミングなしで比例的にスケーリングされたものであった場合)、中央に移動するだけです. 画像がトリミングされた場合 (高すぎてフィードに適切に収まらないなど)、画像の残りの部分が画面の中央に移動すると同時に表示されます。
画像が画面の中央に移動すると、ギャラリー ビュー コントローラーの要素 (完了ボタン、いいね/コメント ボタンなど) が表示されます。
#4 に続いて、別の画像にスワイプし (フルスクリーンの画像ビューで左/右にスワイプして同じアルバム内の別の画像に移動)、#3 で上下にドラッグしようとすると、最初の画像はフィード内の場所に戻りました。
最後に、特定のしきい値を超えて画像を上下にドラッグすると、画像が閉じられ、フィードが再び表示されます。
これは概念的に起こっていると私が考えていることであり、これが正しいアプローチであるかどうかを確認したいと思います (以下の箇条書きは上の箇条書きに対応していません)。
ユーザーが画像をタップすると、その imageView がテーブル ビューのコンテナー ビューのサブビューとして追加されますが、セルからメイン ビューへの imageView の移動が見えないように、まったく同じ位置に追加されます。
次に、その画像の動きを画面の中央にアニメーション化します。同時に、imageView が画面の中央に到達すると同時に 0 になるように、Table View のアルファを減らします。
画像が画面の中央に達したら、アニメーション化せずにモーダル ビュー コントローラーをプッシュし、モーダル ビュー コントローラーのビューのサブビューとして imageView を追加します (上記の効果 #6)。
画像をドラッグすると、モーダル ビュー コントローラーのアルファが減少し、フィード テーブル ビューのアルファが増加し (上記の効果 #3)、特定のしきい値を超えてドラッグすると、ギャラリーが非表示になり、フィードが再び表示されるアニメーションがトリガーされます (効果 #8)。その上)
質問:
私は正しい軌道に乗っていますか?もしそうなら、セルからimageViewを正面図に持ってきて、それをまったく同じ位置に保つにはどうすればよいですか?
別の画像にスワイプすると、元の画像がテーブル ビューのセル内の元の場所に「復元」されます。これは実際には 1 つの imageView をあるビューから次のビューに移動するだけですか? 元のセルにどのように送り返すのですか?ユーザーが画像をタップしたときにそのセルへのポインタを保持してから、次のようなことをし
customCell.imageViewContainerView addSubview:originalImageView
ますか?ユーザーが元の画像にスワイプした場合、これを元に戻す必要がありますか?
私にはこのすべてが重要な実装のように思えますが、効果は素晴らしいと思いますし、それがどのように行われるかについても非常に興味があります. 私はそれを考えすぎていて、実際にそれを行うための本当に簡単な方法がありますか、それとも FB アプリを書いた人に小道具を与えるのは正しいですか?