溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS布局渲染之UIView方法的調(diào)用時機詳解

發(fā)布時間:2020-08-28 21:04:14 來源:腳本之家 閱讀:233 作者:windtersharp 欄目:移動開發(fā)

前言

APP頁面優(yōu)化對小編來說一直是難題,最近一直在不斷的學習和總結 ,發(fā)現(xiàn)APP頁面優(yōu)化說到底離不開view的繪制和渲染機制。本文將詳細給大家介紹關于iOS布局渲染之UIView方法調(diào)用時機的相關內(nèi)容,下面話不多說了,來一起看看詳細的介紹吧。

一、約束

- (void)updateConstraints NS_AVAILABLE_IOS(6_0) NS_REQUIRES_SUPER;

何時觸發(fā)如下所示:

1、initWithFrame時候調(diào)用,但是要求重寫以下方法,并返回YES。

+ (BOOL)requiresConstraintBasedLayout NS_AVAILABLE_IOS(6_0);

2、標記為需要更新,下次drawing cycle自動調(diào)用。當約束改變時,下次render loop還會自動調(diào)用layoutSubviews(布局)

- (void)setNeedsUpdateConstraints NS_AVAILABLE_IOS(6_0);

3、如果有需要更新的標記,立即調(diào)用。當約束改變時,下次render loop還會自動調(diào)用layoutSubviews(布局)

- (void)updateConstraintsIfNeeded NS_AVAILABLE_IOS(6_0);

二、布局

- (void)layoutSubviews;

1、何時觸發(fā)如下所示:

initWithFrame時候調(diào)用,但是rect的值不能為CGRectZero。

- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;

2、標記為需要布局,下次drawing cycle自動調(diào)用。

- (void)setNeedsLayout;

3、如果有需要布局的標記,立即調(diào)用。

- (void)layoutIfNeeded;

4、自己的frame發(fā)生改變時,約束也會導致frame改變。

@property(nonatomic) CGRect frame;

5、添加子視圖或者子視圖frame改變時,約束也會導致frame改變。

6、視圖被添加到UIScrollView,滾動UIScrollView。

三、顯示

- (void)drawRect:(CGRect)rect;

何時觸發(fā)如下所示:

1、initWithFrame時候調(diào)用,但是rect的值不能為CGRectZero。

- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;

2、標記為需要顯示,下次drawing cycle自動調(diào)用。

- (void)setNeedsDisplay;

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI