所以我使用的子視圖包含一個標籤,活動指示燈和的UIImageView。我有它在一個子視圖,我默認時加載我隱藏它彈出子視圖。然而,子視圖並沒有隱藏自己,直到我完成後我需要完成的意義它顯示了約0.01秒,而不是我想要的時間設置隱藏屬性不會立即生效
我試過做這樣的事情。
do{
loadingSubview.hidden=false;
}while(loadingSubview.hidden);
要確定屬性是在繼續之前設置,但它會產生相同的結果是否有我做錯了什麼?
所以我使用的子視圖包含一個標籤,活動指示燈和的UIImageView。我有它在一個子視圖,我默認時加載我隱藏它彈出子視圖。然而,子視圖並沒有隱藏自己,直到我完成後我需要完成的意義它顯示了約0.01秒,而不是我想要的時間設置隱藏屬性不會立即生效
我試過做這樣的事情。
do{
loadingSubview.hidden=false;
}while(loadingSubview.hidden);
要確定屬性是在繼續之前設置,但它會產生相同的結果是否有我做錯了什麼?
你需要退出當前的方法(S)回運行循環任何UI更新發生。在
動做其他的東西這個UI更新後,以後在其他的NSTimer任務或其他動作延遲(只是一對夫婦幾十毫秒都行)。不要在方法中等待。
只要致電:
[loadingSubview setNeedsDisplay];
你應該閱讀「的查看圖紙週期」這裏描述:http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html
貴「的問題」的根本原因是,你阻止事件循環無法處理其事件。繪圖就是其中之一。另外一個是用戶互動活動等,如果你真的想立即取消隱藏按鈕,你可以這樣做:
loadingSubview.hidden = NO; // why "false"??? :)
[self performSelector:@selector(timeConsumingStuff)
withObject:nil
afterDelay:0]; // 0 is good here == "when idle"
你可以肯定你的按鈕,但它不會響應(以及其他)直到耗時完成。
另一個解決方案是明確的進程中運行循環的事件。 (看看[NSRunLoop runMode:beforeDate:]
。但是......除非你把耗時的東西移到另一個線程上,否則將會有一個懲罰
我試過這個,它沒有工作 – endy