mvc框架下,如果model有連續變化,通過delegate傳遞給view是可能出現不一致的,因為動畫的執行過程不再主線程中完成,所以實際上他是不依次執行,2個動畫疊加的結果可能造成m和v的不一致,為了解決這個問題就要對動畫進行排隊。
這是我在這個過程中找到的資料:
首先感謝他們對我的幫助。
我的設想解決方案是直接使用
extension
uiview
來擴充套件乙個可以實現排隊執行動畫的方法。
在學習了bryserialanimationqueue以後遇到的主要問題是,擴充套件不允許使用儲存屬性,不過在找到 了解決辦法使用
objc_getassociatedobject 以及
objc_setassociatedobject !
下面附具體的**及使用:
import uikit
private
var queue_number_id = unsafepointer
()private
var semaphone_number_id = unsafepointer
()extension
uiview
return
objc_getassociatedobject(
self
, &queue_number_id
)! as
dispatch_queue_t}
set }
class
varsemaphore:dispatch_semaphore_t
return
objc_getassociatedobject(
self
, &semaphone_number_id
)! as
dispatch_semaphore_t}
set }
class
func performanimationsserially(animation: ()->void ) ) }
class
func runcompletionblock(completion:(bool->void)?,animationdidfinish finished:bool)
dispatch_semaphore_signal(
self
.semaphore);}
class
func queueanimatewithduration(duration:nstimeinterval,delay:nstimeinterval,options:uiviewanimationoptions,animations:()->void,completion:(bool->void)?)) })
} class
func queueanimatewithduration(duration:nstimeinterval,animations:()->void,completion:(bool->void)?)) })
} class
func queueanimatewithduration(duration:nstimeinterval,animations:()->void)) })
} class
func animatewithduration(duration: nstimeinterval, delay: nstimeinterval, usingspringwithdamping dampingratio: cgfloat, initialspringvelocity velocity: cgfloat, options: uiviewanimationoptions, animations: () -> void, completion: ((bool) -> void))) })
} 使用舉例:
uiview.queueanimatewithduration(tilerefreshexpandtime, delay: tilepopdelay, options: uiviewanimationoptions.transitionnone,
animations: )
tile.
layer
.setaffinetransform(cgaffinetransformmakescale(
self
.tilepopmaxscale
, self
.tilepopmaxscale
))},
completion:)
})
swift 擴充套件
擴充套件就是為乙個已有類 結構體 列舉型別或者協議型別新增新功能。這包括在沒有許可權獲取原始源 的情況下擴充套件型別的能力。擴充套件和objectvie從中的分類類似。swift中的擴充套件可以 新增計算型別屬性和計算型型別屬性 定義例項方法和型別方法 提供新的構造器 定義下標 定義和使用新的巢狀型...
UIView的類擴充套件,擴充套件CGRect
菜雞成長日記 感慨 剛接觸ios程式設計的時候我們常常會先敲 同時學習基礎知識,如果是培訓出來的童鞋,由於沒有基礎或者基礎比較薄弱,往往會發現很多知識都沒怎麼理解,這時候自學 從網上找資料 和討論往往能更有效率的獲得知識 菜雞成長日記 內容 看到前輩們總是在乙個專案中對uiview進行類方法的擴充套...
swift型別擴充套件
1.擴充套件語法 2.計算型屬性 3.構造器 4.方法 5.下標 6.巢狀型別 擴充套件就是向乙個已有的類 結構體或列舉型別新增新功能。包括在沒有許可權獲取原始源 的情況下擴充套件型別的能力 即逆向建模 擴充套件和oc中的分類 category 類似。不過與oc不同的是,swift的擴充套件沒有名字...