swift擴充套件UIView實現動畫依次執行

2021-07-02 04:31:41 字數 2219 閱讀 5948

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的擴充套件沒有名字...