1. 程式人生 > >自定義view中的layoutSubview與drawRect簡單總結

自定義view中的layoutSubview與drawRect簡單總結

-(void)layoutSubviews{}方法說明:
當我們自定義view時(系統view無法更改),如果我們的view中有子view,怎麼辦?往哪裡寫佈局?那麼就是去重寫這個方法。而以下的幾種情況也是說這個自定義view中的佈局何時被觸發:
1、[self setNeedsLayout]
手動加入需要佈局的標誌,在將來需要重新佈局的時候,呼叫[self layoutIfNeed]來進行重新佈局;所以這兩個方法是配合使用的。
2、addSubview會觸發layoutSubviews
當自定義的Viewiew加入到某個父view中時,呼叫addSubview時,那麼這個view佈局自動觸發;
3、設定view的Frame會觸發layoutSubviews,當然前提是frame的值設定前後發生了變化
自動觸發;
4、滾動一個UIScrollView會觸發layoutSubviews
自動觸發;
5、旋轉Screen會觸發父UIView上的layoutSubviews事件
自動觸發。
綜合以上,只有第一個是我們可以手動去進行呼叫重新佈局的方式。
另外,在自定義view中還有另外的一個經常用來重寫的方法-(void)drawRect:(CGRect)rect{}。這個方法與上一個方法不同,這個不是用來佈局子view的,而是將整個view當成一個畫布進行繪製這個view,所以如果
涉及到佈局的時候,我們不會重寫這個方法。與layoutSubviews所相似的是,這個方法也是不能直接呼叫的,有以下的兩個方法來進行view的重繪:
-(void)setNeedsDisplay
-(void)setNeedsDisplayInRect:(CGRect)invalidRect{}
以上的2個方法能夠直接觸發drawRect方法,只是一個要求全部重回,而另一個只要求重繪一部分;