0

これは私の最初の投稿ですが、私は長い間読者でした。このサイトをどうもありがとう!:-)

現在、XNA ベースの 2D エンジンを WP7 から iOS に移植する作業を行っています (5)。テクニックよりもゲームプレイに多くの時間を費やすことを好むため、OpenGL を直接使用することは避けたいと考えています。したがって、OpenGL を (直接) 含まない回答をいただければ幸いです。

問題: UIImageView を別の UIView に追加すると、UIImageView が描画されるまでに少し時間がかかります。これは、内部ですべてを OpenGL に変換してから描画する前に UIView クラスが実行するキャッシュによるものだと思います。

私が欲しいもの:UIView(スーパービュー)に、すべてのサブビューに必要なすべての計算を実行してから、一度にすべて描画するように指示します。現在、私が観察している動作は次のとおりです: uiimageview_1 を計算し、uiimageview_1 を描画し、uiimageview_n を計算し、uiimageview_n を描画します。

私が欲しいもののダミーコード:

// put code here to tell superview to pause drawing
for (int i = 0; i < 400; i ++)
{
    add UIImageView[i] to superview;
}
// put code here to tell superview to draw now

考えられる回避策 (ただし、C# と Windows から来ているため、iOS の Objective-C で効率的に実装する方法がわかりません) - RAM の大きなブロックを (フレームごとに) 転送する必要があったため、このコードは非効率的であると思います。 Retina はネイティブ解像度で表示されます。

for (int i = 0; i < 400; i ++)
{
    add UIImageView[i] to superview;
}
// put code here to get a bitmap in ram from superview
// return bitmap and draw it in a view for the scenery/canvas

この「ポッピング」の問題に対処する方法についての助けをいただければ幸いです。

ありがとう

4

2 に答える 2

1

これに答えるのは少し難しいでしょう。Cocoa Touch の正確な動作は文書化されていないため (Apple によると「実装の詳細」)、推奨事項は推測と経験に基づいてのみ提供されます。

UIViews を操作する代わりに、CoreAnimation を試してみることをお勧めします。UIKit などの UI フレームワークのオーバーヘッドなしで、2D 描画および合成操作を抽象化します。また、OpenGL を直接プログラミングするよりもはるかに簡単に使用できます。UIKit は CoreAnimation を使用して描画を行いますが、さまざまな方法で拡張します。この「拡張」が、パフォーマンスの問題に直面しているまさにその理由である可能性があります。

チュートリアルを見て、自分で判断してください。

于 2012-10-29T10:39:30.257 に答える