35

私は次の効果を達成しようとしています:

UICollectionViewは、フォト アルバムなどのオブジェクトの親タイプのセルのグリッドを表示します。これらのアイテムの 1 つをタップすると、その要素を画面の一番上までスクロールして、そこから Springboard のようなフォルダーを開きたいと思います。そのフォルダ エリア内に、詳細アイテム (つまり、そのアルバムの個々の写真) で構成される別のコレクションが表示されます。残りの「親」ビューをタップすると、フォルダーが再び閉じます。このスキーマを参照してください。

ここに画像の説明を入力

これまでに行ったことは、アルバムの通常のコレクション ビューです。1つを選択すると、選択したアイテムが一番上までスクロールされJWFolders、その場所で空のフォルダーが開かれます。それが表示されたら、周囲をトリガーUINavigationControllerして、詳細項目を含む 2 番目のビュー コントローラーをプッシュします。これは、あたかも同じビューであるかのようにユーザーに表示されるようにレイアウトされています。

このアプローチにはいくつかの問題があります。これをより適切に行う方法を知りたいです。

  1. JWFolders はスクリーンショットを撮り、その 2 つの半分を上下にアニメーション化してオープニング効果を実現します。これは問題ありませんが、iPad3 ではかなり遅くなります。これは、多くのピクセルが移動し、iPad3 の GPU が十分に機能していないためです。

  2. 2 番目のビューは、1 番目のビューの上に一致するようにピクセル パーフェクトである必要があります。これは不意に壊れる可能性があります。

  3. ビューコントローラーの遷移で可能なアニメーションについては制限があります。デフォルトUINavigationControllerの右からのプッシュは適切ではありません。それをオーバーライドしてクロス ディゾルブを実行しましたが、それでも理想とはほど遠いものです。

フレームワークが行うように設計されていることに対して多くの創造的なハッキングを必要としない、保守可能な方法でこの問題に取り組む方法についての指針を得たいと思います。ここでは明らかな何かが欠けている可能性があるため、例へのポインタまたは一般的なアドバイスをいただければ幸いです。

アップデート:

少しアプローチを変えました。ここでは、2 つのコレクション ビュー コントローラーが組み込まれたコンテナー ビュー コントローラーを使用します。1 つは「アルバム」用、もう 1 つは下部の「写真」部分用です。2 つの中間にa を使用するUIImageViewと、上向きの三角形を作成できます。これは、2 つのコレクションが完全に別々に処理されるため、メンテナンスが容易になるため、メンテナンスの観点からも優れています。

アプリは自動レイアウトを使用するため、制約を変更することで、2 つの埋め込みビューのそれぞれが占めるスペースの量を変更できます。これは、JWFolders を使用したスクリーンショット ベースのアプローチよりもはるかに高速であり、iPad3 でもうまく機能します。

これは、私がなりたい場所にほぼ到達します。残っているのは、オープニングアニメーションを正しくすることです. アルバム コレクションを同時にスクロールして、タップしたアイテムが一番上に移動し、アルバム セルを指す三角形で写真コレクションを展開したいと思います。

scrollToItemAtIndexPath:atScrollPosition:animated:呼び出しが下のビューをドラッグして開くように、レイアウトの制約を介して下のビューをそのセルに何らかの方法で「接続」できますか?

4

2 に答える 2

1

それを回避するには、ライブラリを失い、スクリーンショットやその他のトリックなしで iOS にそれらの表示要素を移動させます。タップで、タップされたアイコンを通常の外観に保ち、他のすべてのアイコンを暗くします。タップされたアイコンがある行の先頭から末尾まで、コレクション ビューの内容を検索します。2 つの新しいコレクション ビューを作成します。1 つはタップされたアイコンを含む上半分を含み、もう 1 つは下の残りを含みます。これらのビューを別々にアニメーション化して、フォルダー ビュー用のスペースを作ります。

フォルダー ビューは、作成されたギャップに表示される別の UICollectionView です。メイン ビューには、引き出しが開いているか閉じているかに応じて、1 つまたは 3 つのビューが表示されます。おそらく、コレクション ビューを持つビュー コントローラーを作成し、ビュー コントローラー コンテインメントを使用して 3 つのビューすべてを管理することを検討するでしょう。これらのビューの表示方法を完全に制御できるため、Springboard のように、上部ビューと下部ビューを同時に上下にアニメーション化して、その場所にあるフォルダー ビューを表示できます。

それがすべて機能したら、一般化して、タップされたアイコンを下部コレクションの一部にし、アイコンが画面の下部にある場合はフォルダーを上に表示することを決定するなどのことを開始できます。

(多数の賛成票がまだ回答がないため、これに回答するのをためらっています。そのため、何かを見落としている可能性がありますが、それがスプリングボード効果を達成しようとする方法です。)

于 2013-05-08T00:17:50.727 に答える
0

この問題を比較的簡単に解決するには、フォルダーを単純な UICollectionView サブクラスにして、アルバム セルがタップされたときにそのセルを挿入します。コレクション ビューのデータ ソースでは、フォルダー セルに対して異なるサイズなどを返す必要があります。フォルダーでは、フォルダー コレクション ビューを作成する必要があります。フォルダー セルをセル フォルダー コレクション ビューのデータ ソースにしないでください。

于 2013-08-28T18:33:19.310 に答える