2014-08-29 21 views
0

我在git中找到了一些條形圖項目,我想與之合作:here 代碼非常簡單。繪圖對象只有3個方法,比如init,calc和drawRect。 有趣的一點是,我無法找到該行,即調用此方法:drawRect。 我看了所有的課程。它看起來會自動啓動,但爲什麼?我如何知道哪些方法會自動啓動,哪些不是?uiview中的條形圖項目未使用的方法

回答

1

你看過Apple Documentation on UIView嗎?它具體說明了

當首次顯示視圖或發生使視圖的可見部分無效的事件時,將調用此方法。你應該自己直接調用這個方法。要使視圖的一部分無效,並因此導致該部分被重繪,請改爲調用setNeedsDisplay或setNeedsDisplayInRect:方法。

因此,您絕對不應該直接調用該方法,它會被超級版本setNeedsDisplaysetNeedsDisplayInRect調用。我已經在下面的文章中包含了我建議閱讀的全部內容。

此方法的默認實現不執行任何操作。使用Core Graphics和UIKit等技術繪製其視圖內容的子類應該覆蓋此方法並在其中實現其繪製代碼。如果您的視圖以其他方式設置其內容,則不需要重寫此方法。例如,如果您的視圖僅顯示背景顏色,或者您的視圖使用底層對象直接設置其內容,則不需要重寫此方法。

在調用此方法時,UIKit已經爲您的視圖適當地配置了繪圖環境,並且您可以簡單地調用呈現您的內容所需的任何繪圖方法和函數。具體來說,UIKit創建並配置用於繪製的圖形上下文,並調整該上下文的轉換,以使其原點與視圖的邊界矩形的原點相匹配。您可以使用UIGraphicsGetCurrentContext函數獲取對圖形上下文的引用,但不建立對圖形上下文的強引用,因爲它可以在對drawRect:方法的調用之間切換。同樣,如果您使用OpenGL ES和GLKView類進行繪製,則在調用此方法(或GLKView委託的glkView:drawInRect:方法)之前,GLKit會爲您的視圖合適地配置底層OpenGL ES上下文,以便您可以發出你需要渲染你的內容的任何OpenGL ES命令。有關如何使用OpenGL ES進行繪製的更多信息,請參閱適用於iOS的OpenGL ES編程指南。

您應該將任何圖紙限制在rect參數中指定的矩形中。另外,如果視圖的opaque屬性設置爲YES,則drawRect:方法必須完全填充具有不透明內容的指定矩形。

如果您直接繼承UIView,則此方法的實現不需要調用super。但是,如果您要繼承不同的視圖類,則應在實現中的某個位置調用super。

當首次顯示視圖或發生使視圖的可見部分無效的事件時調用此方法。你不應該直接調用這個方法。要使視圖的一部分無效,並因此導致該部分被重繪,請改爲調用setNeedsDisplay或setNeedsDisplayInRect:方法。

0

我明白了。

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
} 
*/ 

所以只有這一個方法會自動激活。

相關問題