iOS小记--drawRect()中画图背景色无法设置

过程

因为觉得ios-charts有点重,就想自己封装个图表供自家App使用,没那么多代码量,还可以高度定制化。如题所述,遇到这么个问题,任我怎么设置backGroundColor;它就是一团黑。

IMG_0168.PNG

使用这一段代码也没有什么效果。

[[UIColor colorWithWhite:29/255.f alpha:1.0] setFill];
UIRectFill(rect);

上面这段代码和在- (instancetype)initWithFrame:(CGRect)frame方法中设置self.backgroundColor = [UIColor clearColor];效果差不多。

尝试一番,最后发现是由于在使用自定义UI控件的地方设置了backgroundColor 所致,就像这样:

屏幕快照 2019-03-28 17.53.05.png

红框中的那句就是凶手,所以我改用自定义属性设置背景色了。

原因分析

查看UIView的头文件,发现这个属性的默认值是nil。

@property(nullable, nonatomic,copy)            UIColor          *backgroundColor UI_APPEARANCE_SELECTOR; // default is nil. Can be useful with the appearance proxy on custom UIView subclasses.

照我上边的写法,drawRect()中获取上下文时,这个属性肯定已经有值了。测试一番,当我把那句改成给layer的背景上色,显示就如预期了。
scatter.layer.backgroundColor = [UIColor greenColor].CGColor;

由此可见,当使用CGContextRef获取上下文画图时,UIView的backgroundColor属性会影响渲染,导致上色不能成功。详细的渲染过程我也说不上来,有谁知道的话,还请教教我。

Demo

  • https://github.com/iwown/IVCharts

你可能感兴趣的:(iOS小记--drawRect()中画图背景色无法设置)