Iphone 如果drawRect:被覆盖,子类UIView将显示黑色背景

Iphone 如果drawRect:被覆盖,子类UIView将显示黑色背景,iphone,ios,uiview,overriding,drawrect,Iphone,Ios,Uiview,Overriding,Drawrect,我有一个从UIView类派生的自定义类。我想完成的只是绘制垂直的黑线,它们之间有一个预定义的距离。当我重写drawRect方法并编写代码来绘制垂直线时,视图只显示一个完整的黑色背景。然后我注意到,即使是只调用超类的drawRect的空重写drawRect也会导致黑色背景。当我注释掉drawRect时,视图就会显示出来,并像我预期的那样变得透明 这是我在drawRect中使用的唯一代码,它只调用超类方法: - (void)drawRect:(CGRect)rect { [super draw

我有一个从UIView类派生的自定义类。我想完成的只是绘制垂直的黑线,它们之间有一个预定义的距离。当我重写drawRect方法并编写代码来绘制垂直线时,视图只显示一个完整的黑色背景。然后我注意到,即使是只调用超类的drawRect的空重写drawRect也会导致黑色背景。当我注释掉drawRect时,视图就会显示出来,并像我预期的那样变得透明

这是我在drawRect中使用的唯一代码,它只调用超类方法:

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

}

这种行为的原因是什么?

很有可能UIView正在进行一些暗箱操作,基类实际上没有实现drawRect,或者正在进行一些鬼鬼祟祟的优化

文档中没有说明,如果您直接覆盖UIView,就不要调用super,并且还说明,如果您只需设置背景颜色或以其他方式填充内容,则不需要实现drawRect:

此方法的默认实现不执行任何操作。使用本机绘图技术(如Core Graphics和UIKit)绘制视图内容的子类应覆盖此方法并在其中实现其绘图代码。如果视图以其他方式设置其内容,则不需要重写此方法。例如,如果视图仅显示背景色,或者视图直接使用基础图层对象设置其内容,则不需要替代此方法。同样,如果视图使用OpenGL ES进行绘制,则不应重写此方法

以及:

如果直接将UIView子类化,则此方法的实现不需要调用super。但是,如果您正在对不同的视图类进行子类化,那么应该在实现的某个时候调用super

因此,打电话给super很可能会让你失去一些东西。您没有显示任何实际的图形代码,因此很难看出您可能在哪里出错,但作为起点,如果您直接重写了UIView,请不要调用super