9

ここで取得するデフォルトのトランジションの代わりとして機能するカスタムトランジションを作成しようとしています。たとえば、次のようになります。

[self.navigationController pushViewController:someController animated:YES];

プレーンにマッピングされた静的テクスチャにエフェクトを実行する OpenGL ベースのビューを用意しました (コア アニメーションのフリップ エフェクトのコピーとしましょう)。私が行う方法がわからないことは次のとおりです。

  • 現在のビュー コンテンツを取得し、そこからテクスチャを作成します (それを行う関数を見たのを覚えていますが、見つかりません)。
  • 現在画面外にあり、現在のビューを置き換えるビューに対して同じことを行う方法
  • トランジション クラスを可能な限りネイティブにする (コア アニメーション効果の一種にする) ためにフックできる API はありますか?

どんな考えやリンクも大歓迎です!

アップデート

Jeffrey Forbes の回答は、ビューのコンテンツをキャプチャするソリューションとしてうまく機能します。

私がまだ理解していないのは、移行先のビューのコンテンツをキャプチャする方法です。これは、移行が完了するまで非表示にする必要があります。

また、OpenGL ビューを表示するにはどの方法を使用すればよいですか? デモンストレーションのために、pushViewController を使用しました。ただし、これはナビゲーションバーに影響します。実際には、アニメーションを使用して 1 つ前の項目に戻りたいと考えています。説明については、このビデオを確認してください。

http://vimeo.com/4649397 .

もう 1 つのオプションは、presentViewController を使用することですが、それはフルスクリーンを表示します。別のウィンドウ (またはビュー?) を作成すると便利だと思いますか?

4

4 に答える 4

3

OpenGL ES で独自のトランジション アニメーションを実装するトランジション クラスをまとめました。

ここでそれについて読んでください

プロジェクトには 2 つのトランジションの例があります。自由に自分のトランジションを追加してください。

于 2010-03-01T07:50:40.260 に答える
3

私自身の調査を行わずにあなたの質問に完全に答えることはできませんが、少しお手伝いできます。

- UINavigationController のビューを取得するには、スクリーンショットを撮る必要があります。これを行う最も簡単な方法は、UIImage に取得することです。

UIGraphicsBeginImageContext(self.view.frame.size);
[[self.view layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage* test = UIGraphicsGetImageFromCurrentImageContext();
UIImageView* view = [[UIImageView alloc] initWithImage:test];
UIGraphicsEndImageContext();

GLContext (電話ではよくわからない) を CGImage にレンダリングできるかどうかはわかりませんが、そのようなことを行います (そして、そこから UIImage を初期化します)。あなたが行おうとしているアニメーションのすべてのフレームを事前にレンダリングし、提供されているアニメーションを使用して UIImageView に平手打ちします。つまり、アニメーションが十分に単純な場合です。そうでなければ、独自のアニメーション関数を書くことになるかもしれません :-/

于 2008-11-23T04:16:56.103 に答える
1

あなたが考えているかもしれない機能はhttp://www.opengl.org/sdk/docs/man/xhtml/glCopyTexImage2D.xmlだと思います...ビューポートをテクスチャサイズに設定し、通常どおり描画してから実行しますglCopyTexImage2D を使用して、シーンをテクスチャにコピーします。

または、FrameBuffer オブジェクトを調べる必要があります。XCode のデフォルトの OpenGL テンプレートはこれらを使用します。サンプル プロジェクトを生成して、それらがどのように機能するかを確認してください。

于 2009-04-18T08:30:30.833 に答える