1. 兩種方法調用情況
- layoutSubviews調用情況
- init初始化UIView不會觸發(fā)調用
- addSubview會觸發(fā)調用
- 改變view的width和height的時候回觸發(fā)調用
- 一個UIScrollView滾動會觸發(fā)調用
- 旋轉screen會觸發(fā)調用
- 改變一個UIView大小的時候會觸發(fā)superView的layoutSubviews事件
- 直接調用setLayoutSubviews會觸發(fā)調用
- -(void)viewWillAppear:(BOOL)animated會觸發(fā)一次調用
- -(void)viewDidAppear:(BOOL)animated 看情況佑吝,可能有調用。
什么時候重寫layoutSubviews
- 自動布局無法滿足要求(例如要自定義一個按鈕球及,圖片在文字的右側)
- 不要直接調用調用這個方法粒竖,可以調用
setNeedsLayout
颅崩、layoutIfNeeded
。
- drawRect調用情況
- 如果UIView沒有設置frame大小蕊苗,直接導致drawRect不能被自動調用沿后。
- drawRect在loadView和viewDidLoad這兩個方法之后調用
- 調用sizeToFit后自動調用
drawRect
- 通過設置contentMode值為
UIViewContentModeRedraw
。那么每次設置或者更改frame
自動調用drawRect朽砰。 - 直接調用setNeedsDisplay或者setNeedsDisplayInRect會觸發(fā)調用
使用注意
- 在UIView中繪圖,只能在drawRect方法中尖滚,這個方法可以獲取contextRef并繪圖。在其他地方獲取的是無效的
- 如果要在layer中繪圖只能在drawInContext中繪圖
- 如果要實時繪圖不能使用gestureRecognizer,只能用touchBegan等方法來調用setNeedsDisplay實時刷新屏幕瞧柔。