2014-02-14 41 views
1

我有一個應用程序在切換視圖時經歷了一個短暫的延遲,數量級爲500-1500毫秒。視圖的變化很微妙,所以我需要向用戶提供DID發生的反饋。如何在iOS中強制UI消息循環在iOS中刷新之前

我想使用「加載」覆蓋。不幸的是,佔用CPU的工作與構建UI相關,因此無法移動到後臺線程。

由於工作佔用了主線程,如果我在其他操作開始之前添加了加載覆蓋圖,它將永遠不會顯示,因爲該線程正在處理下一個工作負載,並且不會更新UI,直到它到達它。

某些操作系統具有DoEvents或FlushMessagePump方法,可以在極少數情況下使用這些方法。 iOS中有這樣的事情嗎? SetNeedsDisplay()不是我想要的,因爲它只會在消息泵中排隊更新。

其他建議也歡迎。

回答

0

顯示您的加載覆蓋圖,然後使用延遲爲0的- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay來執行實際加載。這會延遲你的加載,直到屏幕有機會刷新爲止,因爲它會將選擇器排列在主線程的運行循環中。

+0

你釘它。非常感謝你。 – TwoRedCells

+0

@TwoRedCells很高興我能幫上忙。 – Gavin

+0

FWIW這隻適用於(對我來說)非零值。例如0.1 – TwoRedCells

1

反而延緩你的負荷,你可以強制運行循環運行:

[[NSRunLoop mainRunLoop] runUntilDate:[NSDate date]]; 
+0

不知道那個!但我喜歡它 ;) – HAS

相關問題