如果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。
- 如何自定义MKPolyLineView来绘制不同的样式线
- Google Maps iOS SDK – 通过GMSMapView添加UIView / UIButton
- 为什么苹果设备在自己的播放器中播放html5video?
- 在Swift中重载一个超类委托
- 如何在不使用UIWebView的情况下播放YouTubevideo,或者当YouTubevideo开始使用webview播放时检测video播放器?
- AVFoundation覆盖另一个video上的alpha通道video?
- 在iOS中运行长时间任务时加载“覆盖”
- 使用select器'touchesBegan:withEvent:'具有不兼容types'(NSSet,UIEvent) – >()'的覆盖方法
- 美国所有州的iOS覆盖(MKPolygon)数据?