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

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

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

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

什么可能是这种行为的原因?

很可能有一些底层的丑陋的事情正在与UIView进行,而且基类实际上并没有实现drawRect,或者有一些鬼鬼祟祟的优化正在发生。

如果你直接覆盖UIView,那么这个文档没有说超级调用,而且它也说你不需要实现drawRect,如果你所做的只是设置背景颜色或者用其他方式填充内容:

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

和:

如果直接inheritanceUIView,则此方法的实现不需要调用super。 但是,如果您inheritance不同的视图类,则应该在实现中的某个位置调用super。

因此,通过打电话超级,你很可能会失去一些东西。 你不显示任何实际的绘图代码,所以很难看到你可能会出错的地方,但作为一个起点,如果你直接覆盖了UIView,不要调用super。