国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

UIView 刷新---setNeedsDisplay、setNeedsLayout

2019-11-07 23:30:30
字體:
來源:轉載
供稿:網友

ios layout機制相關方法

(CGSize)sizeThatFits:(CGSize)size

(void)sizeToFit ——————-

(void)layoutSubviews

(void)layoutIfNeeded

(void)setNeedsLayout ——————–

(void)setNeedsDisplay

(void)drawRect

layoutSubviews在以下情況下會被調用:

1、init初始化不會觸發layoutSubviews

但是是用initWithFrame 進行初始化時,當rect的值不為CGRectZero時,也會觸發

2、addSubview會觸發layoutSubviews

3、設置view的Frame會觸發layoutSubviews,當然前提是frame的值設置前后發生了變化

4、滾動一個UIScrollView會觸發layoutSubviews

5、旋轉Screen會觸發父UIView上的layoutSubviews事件

6、改變一個UIView大小的時候也會觸發父UIView上的layoutSubviews事件

在蘋果的官方文檔中強調:

You should override this method only if the autoresizing behaviors of the subviews do not offer the behavior you want.

layoutSubviews, 當我們在某個類的內部調整子視圖位置時,需要調用。

反過來的意思就是說:如果你想要在外部設置subviews的位置,就不要重寫。

刷新子對象布局

-layoutSubviews方法:這個方法,默認沒有做任何事情,需要子類進行重寫 -setNeedsLayout方法: 標記為需要重新布局,異步調用layoutIfNeeded刷新布局,不立即刷新,但layoutSubviews一定會被調用 -layoutIfNeeded方法:如果,有需要刷新的標記,立即調用layoutSubviews進行布局(如果沒有標記,不會調用layoutSubviews)

如果要立即刷新,要先調用[view setNeedsLayout],把標記設為需要布局,然后馬上調用[view layoutIfNeeded],實現布局

在視圖第一次顯示之前,標記總是“需要刷新”的,可以直接調用[view layoutIfNeeded]

重繪

-drawRect:(CGRect)rect方法:重寫此方法,執行重繪任務 -setNeedsDisplay方法:標記為需要重繪,異步調用drawRect -setNeedsDisplayInRect:(CGRect)invalidRect方法:標記為需要局部重繪

sizeToFit會自動調用sizeThatFits方法;

sizeToFit不應該在子類中被重寫,應該重寫sizeThatFits

sizeThatFits傳入的參數是receiver當前的size,返回一個適合的size

sizeToFit可以被手動直接調用

sizeToFit和sizeThatFits方法都沒有遞歸,對subviews也不負責,只負責自己

———————————-

layoutSubviews對subviews重新布局

layoutSubviews方法調用先于drawRect

setNeedsLayout在receiver標上一個需要被重新布局的標記,在系統runloop的下一個周期自動調用layoutSubviews

layoutIfNeeded方法如其名,UIKit會判斷該receiver是否需要layout.根據Apple官方文檔,layoutIfNeeded方法應該是這樣的

layoutIfNeeded遍歷的不是superview鏈,應該是subviews鏈

drawRect是對receiver的重繪,能獲得context

setNeedDisplay在receiver標上一個需要被重新繪圖的標記,在下一個draw周期自動重繪,iphone device的刷新頻率是60hz,也就是1/60秒后重繪


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 策勒县| 孝义市| 巢湖市| 青铜峡市| 都江堰市| 云龙县| 茶陵县| 邯郸县| 广东省| 惠东县| 灵武市| 离岛区| 玉树县| 峨边| 海淀区| 东港市| 依安县| 霍林郭勒市| 东光县| 博乐市| 习水县| 长垣县| 通州区| 邹城市| 盱眙县| 雅安市| 武强县| 抚顺市| 泰安市| 宁德市| 呈贡县| 嘉义县| 神农架林区| 桃园县| 射阳县| 镇雄县| 鄂伦春自治旗| 加查县| 九江县| 屯门区| 大同县|