0

アクティビティ インジケーターをアニメーション化して表示する方法を知っています。しかし、アクティビティ インジケーターをすぐに表示する方法を知りたいです。

ボタンをクリックすると、5秒または数秒後に別のビューがロードされます。そのボタンをクリックすると、サブビューがロードされます。その Button Click メソッドが呼び出されると、その後 7 つ以上のメソッドが呼び出され、サブビューが読み込まれます。ただし、ActivityIndi​​cator は、7 つのメソッドすべての実行が完了した後にのみ表示されます。

私がやろうとしているのは、その Button Click メソッドの直後に ActivityIndi​​cator を表示したいということです。

何か案が ?

4

4 に答える 4

2
-(IBAction)button_click{

..
..
..

[self performSelector:@selector(afterDelay) withObject:nil afterDelay:0.3];
}

-(void)afterDelay{

YOUR_Code 
}
于 2012-07-05T09:59:00.380 に答える
0

問題は、メインスレッドで大規模な計算(またはインターネットからの読み込み?)を実行することですが、すべてのビューミューテーション操作がすぐに呼び出されるわけではありません。実行ループの開始時に、フレームワークが新しい暗黙のCoreAnimationトランザクションを作成します。ビューのミューテーションに関するすべての情報を収集し、runloopの最後でトランザクションをコミットします。メインスレッドをブロックすることにより、トランザクションがインジケーターのアニメーションをコミットして開始することを許可しなくなります。

このアーキテクチャについては、ドキュメント「Core Animationプログラミングガイド:トランザクション」で読むことができます。

3つのオプションがあります。

  1. (推奨)バックグラウンドで操作を実行します。
  2. に対してバイナリをリンクしQuartzCore.framework#import <QuartzCore/QuartzCore.h>呼び出し[CATransaction commit]後にstartAnimating呼び出します。このようにして、暗黙のトランザクションをコミットします。
  3. 独自の明示的な を作成しますCATransaction
于 2012-07-05T10:59:54.210 に答える
0

コードを表示または再表示するように配置したが、表示されない場合は、再表示後に何かを行うためのメソッドactivityIndicatorを使用する必要があります。または、0.001 の遅延で を表示すると、ボタンをクリックした直後にインジケーターが表示されます。performSelector:withObject:afterDelay:activityIndicator

ハッピーコーディング:)

于 2012-07-05T10:14:22.827 に答える
-1

システムアクティビティインジケータについて話している場合は、これを使用してください:

[[UIApplication sharedApplication] performSelector:@selector(setNetworkActivityIndicatorVisible:) withObject:[NSNumber numberWithBool:YES ] afterDelay:0.0];
于 2012-07-05T10:05:14.253 に答える