Masonry 動畫更新約束


前言

說到iOS自動布局,有很多的解決辦法。有的人使用xib/storyboard自動布局,也有人使用frame來適配。對於前者,筆者並不喜歡,也不支持。對於后者,更是麻煩,到處計算高度、寬度等,千萬大量代碼的冗余,對維護和開發的效率都很低。

筆者在這里介紹純代碼自動布局的第三方庫:Masonry。這個庫使用率相當高,在全世界都有大量的開發者在使用,其star數量也是相當高的。

效果圖

本節詳解Masonry的以動畫的形式更新約束的基本用法,先看看效果圖:

image

我們這里初始按鈕是一個很小的按鈕,點擊就不斷放大,最大就放大到全屏幕。

核心代碼

看下代碼:

講解

更新約束的方法是:mas_updateConstraints。下面筆者一行行代碼說明。

讓控件始終居中顯示:

讓控件的寬和高相等且設置其優先級最低。關於優先級,這里先不細講,后續文章會專門講解。

讓控件的寬和高小於或者等於self.view的寬和高,因此這個控件的最多能放大到全屏幕。

將這三行代碼放在一起,形成的話就是:使控件與父視圖始終保持居中,控件的寬和高最大不能超過屏幕,且控件的寬和高可以變化。由於我們設置了第二行的代碼優先級為priorityLow,因此其優先級是最低的,所以就可以保證寬高不能超過屏幕。

其實,當我們將更新代碼放到updateViewConstraints這個方法中時,我們在viewDidLoad方法中寫的:

就不需要了。這里寫上去的目的只是想說明用與不用都沒有關系。

想要更新約束時添加動畫,就需要調用關鍵的一行代碼:setNeedsUpdateConstraints,這是選擇對應的視圖中的約束需要更新。

對於updateConstraintsIfNeeded這個方法並不是必須的,但是有時候不調用就無法起到我們的效果。但是,官方都是這么寫的,從約束的更新原理上講,這應該寫上。我們要使約束立即生效,就必須調用layoutIfNeeded此方法。看下面的方法,就是動畫更新約束的核心代碼:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM