簡體   English   中英

立即更新UILabel和UIButton

[英]Updating UILabel and UIButton immediately

在一個項目中,我使用setText更改UILabel的文本,使用UIButton的顏色,然后進行耗時的計算,然后進行動畫處理。

但是,文本和顏色的更改會在執行計算后(並且在動畫開始之前)反映出來,但是我想在計算之前立即反映出更改(因為您猜測這是一個等待的文本)

我該如何實現?

將計算移出主線程。

當運行循環有時間時,將執行所有繪圖。 如果要在主線程上執行計算,則將阻塞運行循環,從而阻塞繪圖。 計算完成后,請使用performSelectorOnMainThread啟動動畫或計算完成后在UI中需要進行的其他操作。

編輯:

在主線程上執行計算但使運行循環有機會更新UI的一種快速方法是延遲調用。 使用0.1秒左右的延遲。 您可以使用NSTimer進行基本相同的操作。 這在NSRunLoop.h中

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;

如果在計算時不需要響應界面,最簡單的方法是避免線程:將耗時的計算放在自己的方法中,然后使用[calculator performSelector:@selector(calculateThis:) withObject:myArgument afterDelay:0]

這將允許運行循環更新您的界面更改,然后在主線程上開始計算(阻止它)。

開始在后台線程中運行的計算。

我認為您最好的選擇是在后台線程中執行耗時的動畫。 這樣,您的主UI線程將不會阻塞,並且文本和顏色將立即更改。 此外,在執行計算時,您的UI將保持響應狀態。

通常,最好不要使用繁重的計算來阻塞主線程,因為這會使應用程序的外觀響應速度不佳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM