iOS佈局渲染-UIView方法調用時機

iOS佈局渲染-UIView方法調用時機

一、約束

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

何時觸發如下所示:

  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. initWithFrame時候調用,但是rect的值不能爲CGRectZero。

    - (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
  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。

    - (instancetype)initWithFrame:(CGRect)frame NS_DESIGNATED_INITIALIZER;
  2. 標記爲需要顯示,下次drawing cycle自動調用。

    - (void)setNeedsDisplay;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章