4

スピナーを使いたいのですが。しかし、以下のこのコードはスピナーを表示しておらず、理由はわかりません。これを機能させる方法は?ところで、私が作成した送信ボタンから呼び出されています。

//spinner declared in .h file
UIActivityIndicatorView   *aSpinner; 

//throw up spinner from submit btn we created
aSpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:
    UIActivityIndicatorViewStyleWhiteLarge];

[self.view addSubview:aSpinner]; 
[aSpinner release]; 
[aSpinner startAnimating]; 

//send blocking request 
[request startSynchronous];

//get rid of spinner when finished delegate is fired
- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    NSLog(@"REQUEST FINISHED"); 
    [aSpinner stopAnimating]; 
    //[aSpinner release]; 
} 
4

3 に答える 3

14

スピナーを表示した直後にブロッキングコードを呼び出すと、メインの実行ループが実行されているときにのみ更新されるため、UIは更新されません。[request startSynchronous]これが本当に問題の原因である場合は、テストの行をコメントアウトするときにスピナーが表示されます。

解決策は、非同期リクエストを使用することです。委任コードはすでにそれを行っているように見えますが、一方で、start呼び出しは同期操作について言及しています。説明してくれませんか?(または私は何かを見落としましたか?)

于 2011-01-03T17:51:32.793 に答える
3
//spinner declared in .h file
UIActivityIndicatorView  *aSpinner; 

ヘッダーファイルにもプロパティを追加します。

@property (nonatomic, retain) UIActivityIndicatorView *aSpinner;

.mファイルで合成することを忘れないでください!

//throw up spinner from submit btn we created
UIActivityIndicatorView *tempSpinner = [[UIActivityIndicatorView alloc]  initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self.aSpinner = tempSpinner;
[tempSpinner release];

[self.view addSubview:self.aSpinner]; 
[self.aSpinner startAnimating]; 

//send blocking request 
[request startSynchronous];


//get rid of spinner when finished delegate is fire
- (void)requestFinished:(ASIHTTPRequest *)request { 
      NSLog(@"REQUEST FINISHED");
      [self.aSpinner stopAnimating]; 
}

あなたのdeallocメソッドであなたは次のように書きます:[aSpinnerリリース]; ただし、これは多くのアプローチの1つにすぎません。

于 2011-01-03T17:48:39.080 に答える
0

問題は、スピナーを追加しているビューにある可能性があります。可能であり、アクティビティインジケータを表示するための寸法がありますか?(たとえば、UIBarButtonItemsはaddSubviewを処理できません)

于 2011-02-01T20:56:20.683 に答える