iOS布局渲染之UIView方法的呼叫時機詳解

2022-09-21 14:18:09 字數 1464 閱讀 7328

前言

app頁面優化對小編來說一直是難題,最近一直在不斷的學習和總結 ,發現app頁面優化說到底離不開view的繪製和渲染機制。本文將詳細給大家介紹關於ios布局渲染之uiview方法呼叫時機的相關內容,下面話不多說了,來一程式設計客棧起看看詳細的介紹吧。

一、約束

- (void)updateconstraints ns_**ailable_ios(6_0) ns_requires_super;

何時觸發如下所示:

1、initwithframe時候呼叫,但是要求重寫以下方法,並返回yes。

+ (bool)requiresconstraintbasedlayout ns_**ailable_ios(6_0);

2、標記為需要更新,下次drawing cycle自動呼叫。當約束改變時,下次render loop還會自動呼叫layoutsubviews(布局)

- (void)setneedsupdateconstraints ns_**ailable_ios(6_0);

3、如果有需要更新的標記,立即呼叫。當約束改變程式設計客棧時,下次render loop還會自動呼叫layoutsubviews(布局)

-qdobnewa (void)updateconstraintsifneeded ns_**ailable_ios(6_0);

二、布局

- (void)layoutsubviews;

1、何時觸發如下所示:

initwithframe時候呼叫,但是rect的值不能為cgrectzero。

- (instancetype)initwithframe:(cgrect)frame ns_designated_initializer;qdobnewa

2、標記為需要布局,下次drawing cycle自動呼叫。

- (void)setneedslayout;

3、如果有需要布局的標記,立即呼叫。

- (void)layoutifneeded;

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

@property(nonatomic) cgrect frame;

5、新增子檢視或者子檢視frame改變時,約束也會導致frame改變。

6、檢視被新增到uiscrollview,滾動uiscrollview。

三、顯示

- (void)drawrect:(cgrect)rect;

何時觸發如下所示:

1、initwithframe時候呼叫,但是rect的值不能為cgrectzero。

qdobnewa- (instancetype)initwithframe:(cgrect)frame ns_designated_initializer;

2、標記為需要顯示,下次drawing cycle自動呼叫。

- (void)setneedsdisplay;

總結本文標題: ios布局渲染之uiview方法的呼叫時機詳解

本文位址:

iOS開發之UIView和CALayer的區別

最大的區別是 圖層 calayer 不會直接渲染到螢幕上。uiview是ios系統中介面元素的基礎,所有介面元素都是繼承自它。它本身完全是由coreanimation來實現。真正的繪圖部分,是由乙個calayer類來管理。乙個uiview上可以由n個calayer,每個calayer顯示一種東西,增...

iOS之離屏渲染

on screen rendering 意為當前螢幕渲染,指的是gpu的渲染操作是在當前用於顯示的螢幕緩衝區中進行。off screen rendering 意為離屏渲染,指的是gpu在當前螢幕緩衝區以外新開闢乙個緩衝區進行渲染操作。特殊的離屏渲染 如果將不在gpu的當前螢幕緩衝區中進行的渲染都稱為...

IOS 開發之UIView動畫的例項詳解

ios 動畫例項詳解 ios動畫的實現方式多種多樣,這裡就只記錄一下 beginanimations context 在你呼叫 beginanimations context 方法來啟動乙個動畫後,動畫並不會立即被執行,直 到你呼叫 uiview 類的 commitanimations 類方法。你對...