首先,我知道有一些關於此主題的其他StackOverflow問題,但我已經閱讀了所有這些問題,我仍然對如何處理我的情況感到困惑。我可能在這裏錯過了一些顯而易見的東西,如果你能幫助澄清一下,我們將非常感謝!重複NSTimer鎖UI線程
我有一個應用程序,它在視圖內爲圖像添加動畫做了很多工作 - 主要包括一次以直線移動一個或多個圖像的大量圖像。我首先考慮的是讓它們變得簡單,一旦在整個移動過程中使用UIView animateWithDuration
關閉動畫。但是我發現這並沒有給我很大的力量來攔截這個動作或者阻止它或者檢查它到底在哪裏,所以我放棄了這個動作。我的新方法是使用NSTimer,每秒發射20次,做增量運動。這種方式我也可以立即干預(幾乎)立即改變動畫或停止它或更新狀態標籤,基於它是多遠,等等等等。
首先...有可能有更好的方法比這個。隨意建議更好的東西!
雖然這是可以接受的,但現在我的問題是,當這些動畫發生時,我無法點擊UI上的任何其他控件。我沒有得到任何迴應。它不像它只是緩慢或延遲 - 點擊從來沒有通過。看來NSTimer處理完全鎖定了用戶界面 - 但僅僅來自新的交互。我在定時器處理方法中對UI做出的更改發生得很好,而且非常活潑。
從我讀過的這個應該不會發生。不過,我也看到this question的評論說,如果定時器處理密集,然後它可能鎖定UI線程。我沒有看到我的處理在這裏是密集的 - 當然沒有資源請求,只是一些數據操縱和動畫的一些對象 - 但我可能會掩蓋它。
我在這裏有什麼選擇?起初我想我可能會創建一個新線程來啓動計時器。但我記得讀過,UI更新必須在主線程上發生。爲什麼是這樣?此外,這真的能解決問題嗎?我只是問太多的設備來處理這個計時器以及UI交互?還有什麼我失蹤?
任何和所有的意見,將不勝感激。
編輯:
我剛剛發現我的UI阻塞問題的原因。我正在使用帶有塊的animateWithDuration
,但沒有設置選項。因此UIViewAnimationOptionAllowUserInteraction
未設置。我改變它設置這個選項,我的用戶界面現在很高興地迴應。
這就是說,我仍然會留下這個問題,針對我的整體方法提出具體建議。謝謝。
對不起,也許我誤導了你。我只有一個計時器來控制所有的物體和它們的運動 - 這幾乎是你描述的。我認爲即使這可能不是最好的方法。無論如何,關於這與如何鎖定UI的問題有關的任何想法? – user700774
對不起,我的印象是你使用了多個定時器或線程。這幾乎肯定會造成太多人在跑步的問題。很高興你的問題得到解決:) – mjdth