2013-05-31 45 views
3

我目前有一個非常奇怪的錯誤。setHidden:有不必要的延遲

一個方法被調用,它應該通過停止它來隱藏一個UIActivityIndicatorView(啓用停止時自動隱藏)和一個名爲badIndicatorUIImageView

作爲替換,它應該顯示另一個UIImageView,稱爲goodIndicator

[goodIndicator setHidden:NO]; 
[badIndicator setHidden:YES]; 
[refreshIndicator stopAnimating]; 
NSLog(@"statussetting good should be completed"); 

控制檯打印如下向右走,但大約需要三秒鐘就會切換到屏幕上發生。

2013-05-31 20:24:57.835 app name[5948:1603] statussetting good should be completed 

我試圖調用的對象和父視圖的setNeedsDisplay方法,並且還具有α取代隱藏。 仍然有同樣的問題。

回答

11

這聽起來像你是從後臺線程調用這個。與UIKit的所有交互需要從主線程發生。嘗試使用:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [goodIndicator setHidden:NO]; 
    [badIndicator setHidden:YES]; 
    [refreshIndicator stopAnimating]; 
    NSLog(@"statussetting good should be completed"); 
}); 
+1

完美的,它就像一個魅力。它是從URL-Request的完成處理程序調用的。 我不知道,這是在不同的線程上運行 –

2

則需要使用調用此方法在主thread.Try:

-(void)hideControls { 
    [goodIndicator setHidden:NO]; 
    [badIndicator setHidden:YES]; 
    [refreshIndicator stopAnimating]; 
    NSLog(@"statussetting good should be completed"); 
} 
+2

您的示例與海報提供的內容基本相同。唯一不同的是你提到在主線程中調用它,但沒有詳細說明。爲了有幫助,我建議提供一個例子來說明如何確保代碼在主線程上運行,與上面的答案不同。 – Jeremy