2012-05-01 16 views
0

アニメーション化されたUIImageViewを使用して30の512 x 512フレームのシーケンスを表示するコントローラがあります。アプリケーションを実行すると、ビューはすぐに以下を実行します。アニメーション化されたUIImageViewを使用したviewDidLoadとviewDidAppearの間の遅延

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [[self imageView] setAnimationImages:[[self dataModel] framesForLOOP]]; 
    [[self imageView] setAnimationDuration:2.5]; 
    [[self imageView] setAnimationRepeatCount:1]; 
    [[self imageView] startAnimating]; 
    NSLog(@"MARKER_001"); 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    NSLog(@"MARKER_002"); 
} 

このすべてが正常に動作しますが、私が動作するようにしようとしていることviewDidLoad:が呼び出された後viewDidAppear:が(MARKER_001とMARKER_002間)と呼ばれる前に2秒の遅延があることです。

フレームNSArrayの設定が遅れているか、setAnimationImages:、またはstartAnimatingの呼び出し後に遅延が発生する可能性があると考えていました。

この遅延を減らす/削除するには、そこにはありますか?スタートアップ時にアニメーションをプリロードし、ビューコントロールがロードされてから新しいものをインスタンス化するボタンを作成するので、コントローラが遅れを感じる。

+0

imageViewの情報がコメントアウトされているときにそれを比較することはできますか?最初にそれが問題かどうかを見てみましょう。 – danh

+0

私は[super viewDidLoad];とNSLog(@ "MARKER_001");遅延はありません。私は遅れが基本的にviewControllerは、画面上でアニメーションUIImageViewを取得し、再生するためにシーンの背後に必要なものを設定していると思われる。 – fuzzygoat

答えて

0

startAnimatingviewDidLoadに呼び出しても、アニメーションがそこから開始されないことに注意してください。まだ表示されていないコントローラでアニメーションを実行することはできません。

startAnimatingviewDidAppearに、代わりにstartAnimatingに電話する必要があります。

これらの2つの方法の間の2秒の遅延は、奇妙なことではありません。遅延は、アプリケーション内部で何が起こるかに応じて、はるかに長くても短くてもかまいません。 接続されていない2つの方法の間の時間を測定することは意味をなさない。個々のメソッドがどれくらいの時間を取るかについてはどうでしょうか?

遅れがある場合は、ユーザーアクションと、すべてが表示され、遅れが発生した瞬間に発生するすべてのコードを貼り付ける必要があります。

+0

私は上記のようにUIImageViewの呼び出しをゼロ遅延がない限り、私は論理的な流れに従っています。私は、遅延の方法がちょっと避けられないオーバーヘッドか、セットアップ/キャッシュできる場所が他にあるかもしれないかどうかを調べようとしていました。公正であるためには、コントローラがロードするときに、要求されたフレームをオンデマンドでメモリに移動し、実際には事前にキャッシュすることができないと仮定します。 – fuzzygoat

+0

あなたの質問と測定に大きな欠陥があり、正しく答えることは不可能であることを伝えています。 – Sulthan

+0

私はちょうどiOSが現時点で舞台裏で何をしているのかを明らかにしようとしていたことが分かりました。あなたが提案したように、私は関連する方法をタイムリーにしており、そこでは著しい減速は見られません。あなたの答え、その有効な点をありがとうございます。 – fuzzygoat

2

ただ、いくつかのアイデア:

  1. は、痛みを軽減する - あなたは30x512x512が必要なのでしょうか?
  2. 最初のイメージをviewWillAppearにロードし、他のイメージをロードし、新しいイメージが準備されているときにアニメーションイメージを更新します(必要に応じてコードを提供できます)。
  3. 痛みを動かす - アプリ初期化のUIImagesの。
  4. もっと深く掘り下げてみましょう - framesForLoopメソッドを見てみましょう。おそらくそこに痛みを軽減/分散/移動する機会があります。
+0

ありがとうダン、これらは非常に良い点です。画像は512である必要はありませんが、小さくても構いませんが、アニメーションイントロ512の場合と同じように、網膜ディスプレイではすでに非常に小さい512です。あなたが言うframesForLoopメソッドは、実際には、アニメーション化されたUIImageViewに必要なすべてのUIImagesを含むNSArrayです。これは、仕事の一部を取り除き、最初にローディング/スプラッシュ画面の下に置くことで、私の最初の狙いでした。私はここでいくつかの指針を取って明日プレーをするだろう、もう少し詳しく調整できるかどうか見てみよう。あなたの時間をもう一度おねがいします、非常に感謝します。 – fuzzygoat

関連する問題