2

この質問はよく聞かれるようですが、UIKit と同じようにカスタム トランジションを使用できるかどうかについて、決定的な答えを見つけたことがありません。

現在のビューと次のビューのスクリーンショットを撮り、アニメーションの下でビュー コントローラーを変更しながらそれらをアニメーション化するなどのトリックを実行できることを私は知っています。ただし、これにはかなりのメモリが必要です。これは、(スクリーンショットのために) 基本的に 2 つの完全な余分な画面を描画するためです。

ビュー コントローラーにカスタム アニメーションを表示する、よりエレガントな方法を探しています。または、上記のアプローチを実行するためのよりメモリ効率の良い方法はありますか?

4

2 に答える 2

5

移行方法、コントローラーがコンテナー コントローラーに埋め込まれているかどうかなどに応じて、これを実現するにはいくつかの方法があります。単一のコントローラーがあり、別のコントローラーに移行する最も単純なケースでは、次の手順でそれを行うことができます。

  1. 新しいコントローラーをインスタンス化します (それを B と呼び、元のコントローラーを A と呼びましょう)
  2. B のビューをウィンドウのサブビューとして追加します (self.view.window から取得)
  3. 必要なトランジションの種類に応じて、B のフレームを任意の方向に画面外に設定するか、アルファを 0 にするか、サイズをゼロにします。
  4. animateWithDuration:animations:completion: remove A's view (完了ブロック内) で必要な遷移を実行します
  5. 完了ブロックで、B をウィンドウのルート ビュー コントローラーにします。
于 2013-02-06T23:40:35.490 に答える
1

基本的に、システムに自動的に保持と解放を行わせ、rdelmar の回答で概説されている呼び出しの下で何が起こっているかを実行します。ビューコントローラーの移行は、システムがコントローラーをメモリに保持しながらビューをアニメーション化するだけです。

しかし、より多くの質問に答えるために、UIView アニメーションは複製を作成し、画像もキャッシュします。(ちなみに、システム キャッシュはメモリをアンロードしないため、UIImage imageNamed.

効率が必要な場合は、タイマーを使用して自分でコーディングし、考えられるすべてのグラフィックストリックをドラムアップすることをお勧めします。

また、iOS が以前のバージョンと同じように動作するとは絶対に信じないでください。私が言ったことはすべて、iOS 6 が注釈の保持を壊したのと同じように間違っている可能性があり、マニュアルには、iOS 3 のアニメーションは時代遅れになる (そして代わりに置き換えられるのでしょうか?) と書かれています。試してみると、やや遠い将来に更新されます。

于 2013-02-15T17:24:04.727 に答える