0

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

- (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:のは、呼び出された後、呼び出される前に 2 秒の遅延があることですviewDidAppear:(MARKER_001 と MARKER_002 の間)。

フレームのセットアップ、NSArrayまたは呼び出しの後、setAnimationImages:またはおそらく後に遅延が発生する可能性があると考えていましたstartAnimating

とにかくこの遅延を減らす/削除する方法はありますか?新しいコントローラーをインスタンス化するためにセグエを起動するボタンが遅延するため、viewController の読み込み時に遅延が発生するよりも、起動時にアニメーションをプリロードしてそこでヒットすることをお勧めします。

4

2 に答える 2

2

いくつかのアイデア:

  1. 痛みを軽減 - 30x512x512 が必要ですか?
  2. 痛みを分散 - viewWillAppear で最初の画像をロードし、操作を開始して他の画像をロードし、新しい画像の準備ができたらアニメーション画像を更新します (必要に応じてコードを提供できます)。
  3. 痛みを和らげる - アプリの初期化で UIImages の配列を準備します。
  4. さらに掘り下げてみましょう - framesForLoop メソッドを見てみましょう。そこに痛みを軽減/分散/移動する機会がもう少しあるかもしれません。
于 2012-05-01T17:59:37.687 に答える
0

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

startAnimating代わりにinを呼び出す必要がありますviewDidAppear

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

何かラグがある場合は、おそらくユーザー アクションと、すべてが表示されてラグが発生する瞬間との間に発生するすべてのコードを貼り付ける必要があります。

于 2012-05-01T17:11:57.530 に答える