2012-12-28 48 views
1

我有一個自UIView類派生的自定義類。我想要完成的只是繪製垂直黑線和之間的預定義距離。當我重寫drawRect方法並編寫我的代碼來繪製垂直線時,該視圖僅顯示完整的黑色背景。然後我注意到,即使是一個空的重寫drawRect,它只調用超類的drawRect結果在黑色背景中。當我將drawRect註釋掉時,視圖會按照我的預期顯示並變得透明。如果drawRect:被覆蓋,則子類UIView顯示黑色背景

這是我使用中只是調用父類方法的drawRect唯一代碼:

- (void)drawRect:(CGRect)rect 
{ 
    [super drawRect:rect]; 

} 

有什麼可以對這種行爲的原因嗎?

回答

3

這很可能是有一些在引擎罩與詭計UIView的事情,與基類沒有實際實現的drawRect,或者一些偷偷摸摸的優化正在發生的事情。

如果您直接覆蓋UIView,文檔確實不會調用super,並且還表示如果您只需設置背景顏色或以其他方式填充內容,則無需實施drawRect:

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

和:

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

因此,很有可能通過調用超級,你會失去一些東西。您不會顯示任何實際的繪圖代碼,因此很難看出您可能會出錯的位置,但作爲一個起點,如果您直接覆蓋UIView,請勿調用super。