2012-11-06 57 views
0

MBProgressHUD存在一些問題。我正在下載一些圖像和JSON並試圖顯示狀態。MBProgressHUD完成後閃爍並阻止UI 2秒

這是我的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工作。我不知道爲什麼。所以,方法downloadImages使用NSOperationQueue爲了處理與AFNetworking的下載。在NSOperationQueue完成後,我打電話給finishedDownload

這個方法調用

[HUD hide:YES]; 

這是工作。 HUD隱藏,但UITableView被阻止約2秒。 2秒後,HUD立即閃爍並隱藏起來。在那之後,我可以與UITableView進行交互。

這裏有什麼問題嗎?我非常感謝幫助。

感謝

回答

0

我會嘗試這個代碼位移動到-viewDidAppear:而不是-viewDidLoad:。當子視圖執行動畫之前,超級視圖沒有完全定位時,肯定有一些weird issues

0

我會做其他答案說,並將您的邏輯移動到viewDidLoad或viewDidAppear以防止視圖的任何啓動問題。

此外,在開始網絡呼叫之前,您需要給UI線程足夠的時間顯示HUD。由於您在視圖中做任何事情之前顯然都需要數據,因此您處於正確的道路上。您只需要讓HUD時間顯示和解除。

HUD在顯示時通常是UI阻塞...所以用戶無法對當前視圖(後退按鈕,其他按鈕)執行任何操作,但可以訪問其他內容標籤欄項或任何未鏈接到您添加HUD的視圖。

我真的會改變你的網絡通話。

更改此:

[self downloadImages]; 

要這樣:

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

這將釋放你的線程直至完全顯示HUD。無論如何,由於您的行爲在HUD結束時通常不會出現問題。但是有時候你可能會遇到類似的問題,所以你可以考慮將你的HUD解除調用移動到一個可以在主線程中調用的方法。希望這可以幫助。