0

MBProgressHUD に問題があります。いくつかの画像と JSON をダウンロードして、ステータスを表示しようとしています。

これは私のものviewdidloadです:

HUD = [[MBProgressHUD alloc] initWithView:self.view];
HUD.labelText = @"Lade Bilder runter...";
HUD.mode = MBProgressHUDModeAnnularDeterminate;
HUD.detailsLabelText = @"Schritt 1 von 2";
HUD.yOffset = -10;
[self.view addSubview:HUD];
[HUD show:YES];
[self downloadImages];

showWhileExecutingで動作していませんNSOperationQueue。理由がわかりません。したがって、メソッドdownloadImagesNSOperationQueueでダウンロードを処理するために使用しますAFNetworking。NSOperationQueue が終了したら、 を呼び出しますfinishedDownload

そのメソッドが呼び出す

[HUD hide:YES];

これは機能しています。HUD は隠れていますが、UITableView は約 2 秒間ブロックされています。その 2 秒後、HUD が点滅し、すぐに非表示になります。そのフラッシュの後、UITableView を操作できます。

ここで何が問題なのですか?本当に助かります。

ありがとう

4

2 に答える 2

0

このコードを-viewDidAppear:の代わりに移動してみ-viewDidLoad:ます。サブビューがアニメーションを実行する前にスーパービューが完全に配置されていない場合、確かにいくつかの奇妙な問題があります。

于 2012-11-12T23:39:43.000 に答える
0

他の回答が言ったように、ロジックをviewDidLoadまたはviewDidAppearに移動して、ビューの起動の問題を防ぎます。

また、ネットワーク呼び出しを開始する前に、HUD を表示するのに十分な時間を UI スレッドに与える必要があります。ビューで何かを行う前に明らかにデータが必要なので、正しい道を進んでいます。HUD の表示と非表示の時間を確保する必要があります。

HUD は通常、表示されている間は UI をブロックします...そのため、ユーザーは現在のビュー (戻るボタン、その他のボタン) で何もできませんが、タブ バーの項目やHUD を追加したビューにリンクされていないもの。

私は実際にあなたのネットワークコールを変更します。

これを変える:

[self downloadImages];

これに:

[self performSelector:@selector(downloadImages) withObject:nil afterDelay:0.1];

これにより、スレッドが解放され、HUD の表示が完了します。アクションは HUD を閉じることで完了するため、通常は無視しても問題ありません。ただし、同様の問題が発生する場合もあるため、HUD の終了呼び出しを、メイン スレッドで呼び出すことができるメソッドに移動することを検討してください。お役に立てれば。

于 2012-12-20T16:57:20.023 に答える