LayoutSubView和drawRect

1. 兩種方法調(diào)用情況

  • layoutSubviews調(diào)用情況
  • init初始化UIView不會觸發(fā)調(diào)用
  • addSubview會觸發(fā)調(diào)用
  • 改變view的width和height的時候回觸發(fā)調(diào)用
  • 一個UIScrollView滾動會觸發(fā)調(diào)用
  • 旋轉(zhuǎn)screen會觸發(fā)調(diào)用
  • 改變一個UIView大小的時候會觸發(fā)superView的layoutSubviews事件
  • 直接調(diào)用setLayoutSubviews會觸發(fā)調(diào)用
  • -(void)viewWillAppear:(BOOL)animated會觸發(fā)一次調(diào)用
  • -(void)viewDidAppear:(BOOL)animated 看情況,可能有調(diào)用。

什么時候重寫layoutSubviews

  1. 自動布局無法滿足要求(例如要自定義一個按鈕,圖片在文字的右側(cè))
  2. 不要直接調(diào)用調(diào)用這個方法,可以調(diào)用setNeedsLayoutlayoutIfNeeded
  • drawRect調(diào)用情況
  • 如果UIView沒有設(shè)置frame大小,直接導(dǎo)致drawRect不能被自動調(diào)用。
  • drawRect在loadView和viewDidLoad這兩個方法之后調(diào)用
  • 調(diào)用sizeToFit后自動調(diào)用drawRect
  • 通過設(shè)置contentMode值為UIViewContentModeRedraw。那么每次設(shè)置或者更改frame自動調(diào)用drawRect。
  • 直接調(diào)用setNeedsDisplay或者setNeedsDisplayInRect會觸發(fā)調(diào)用

使用注意

  • 在UIView中繪圖,只能在drawRect方法中,這個方法可以獲取contextRef并繪圖。在其他地方獲取的是無效的
  • 如果要在layer中繪圖只能在drawInContext中繪圖
  • 如果要實時繪圖不能使用gestureRecognizer,只能用touchBegan等方法來調(diào)用setNeedsDisplay實時刷新屏幕。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容