iOS布局渲染之UIView方法的調用時機詳解
前言
APP頁面優(yōu)化對小編來說一直是難題,最近一直在不斷的學習和總結 ,發(fā)現(xiàn)APP頁面優(yōu)化說到底離不開view的繪制和渲染機制。本文將詳細給大家介紹關于iOS布局渲染之UIView方法調用時機的相關內容,下面話不多說了,來一起看看詳細的介紹吧。
一、約束
- (void)updateConstraints NS_AVAILABLE_IOS(6_0) NS_REQUIRES_SUPER;
何時觸發(fā)如下所示:
1、initWithFrame時候調用,但是要求重寫以下方法,并返回YES。
+ (BOOL)requiresConstraintBasedLayout NS_AVAILABLE_IOS(6_0);
2、標記為需要更新,下次drawing cycle自動調用。當約束改變時,下次render loop還會自動調用layoutSubviews(布局)
- (void)setNeedsUpdateConstraints NS_AVAILABLE_IOS(6_0);
3、如果有需要更新的標記,立即調用。當約束改變時,下次render loop還會自動調用layoutSubviews(布局)
- (void)updateConstraintsIfNeeded NS_AVAILABLE_IOS(6_0);
二、布局
- (void)layoutSubviews;
1、何時觸發(fā)如下所示:
initWithFrame時候調用,但是rect的值不能為CGRectZero。
- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
2、標記為需要布局,下次drawing cycle自動調用。
- (void)setNeedsLayout;
3、如果有需要布局的標記,立即調用。
- (void)layoutIfNeeded;
4、自己的frame發(fā)生改變時,約束也會導致frame改變。
@property(nonatomic) CGRect frame;
5、添加子視圖或者子視圖frame改變時,約束也會導致frame改變。
6、視圖被添加到UIScrollView,滾動UIScrollView。
三、顯示
- (void)drawRect:(CGRect)rect;
何時觸發(fā)如下所示:
1、initWithFrame時候調用,但是rect的值不能為CGRectZero。
- (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
2、標記為需要顯示,下次drawing cycle自動調用。
- (void)setNeedsDisplay;
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
iOS中使用NSProgress類來創(chuàng)建UI進度條的方法詳解
NSProgress是iOS7以后引入的用于制作進度條的類,能夠監(jiān)聽多個任務,這里就為大家?guī)韎OS中使用NSProgress類來創(chuàng)建UI進度條的方法詳解,需要的朋友可以參考下2016-06-06CAMediaTiming ( 時間協(xié)議)詳解及實例代碼
這篇文章主要介紹了CAMediaTiming / 時間協(xié)議詳解及實例代碼的相關資料,這里附有實例代碼,幫助大家學習參考,需要的朋友可以參考下2016-12-12