我試圖在遠程通知到達時在屏幕上顯示自定義UIView
5秒鐘。如何用GCD做'序列'動畫?
這樣的代碼:
//customView.alpha = 1.0 here
[UIView animateWithDuration:1 animations:^{
customView.alpha = 0.3;
}
completion:^(BOOL finished){
// remove customView from super view.
}];
的問題,我需要什麼樣的
但這兒有情況,一對夫婦的通知,可能會在很短的時間間隔,在這幾個customView
可能同時進行動畫製作,並且可以覆蓋其他人。
我希望這些動畫能夠一個接一個地執行,這樣它們就不會發生衝突。
假設,但未能
//(dispatch_queue_t)queue was created in other parts of the code
dispatch_sync(queue, ^{
[UIView animationWithDuration:animations:...];
});
使得在GCD隊列中的動畫後,我得到了相同的結果,爲我所用的起源代碼,沒有使用GCD。動畫仍然是相互衝突的。
BTW,聽說動畫或任務涉及UI應該總是在主線程中運行,但在我的第二個代碼中的動畫似乎做smoothy。爲什麼?
你有和@Ducan類似的想法。感謝您的代碼。你認爲我們應該鎖定'self.numberOfTimesToRunAnimation'嗎? – studyro
是的。通過不將該屬性定義爲「非原子」並且從不直接訪問該變量(始終使用該屬性),系統將爲您鎖定該變量,以便兩個線程不會同時讀取/寫入該變量。 –
非常好。我用它來控制segmentedControl UI。通過將'selectedIndex'放入屬性中,並在完成時將其設置爲'NSNotFound',我不必在動畫過程中禁用該控件。謝謝! –