iOS小记--drawRect()中画图背景色无法设置
2019-03-28 本文已影响81人
原鸣清
过程
因为觉得ios-charts有点重,就想自己封装个图表供自家App使用,没那么多代码量,还可以高度定制化。如题所述,遇到这么个问题,任我怎么设置backGroundColor;它就是一团黑。
使用这一段代码也没有什么效果。
[[UIColor colorWithWhite:29/255.f alpha:1.0] setFill];
UIRectFill(rect);
上面这段代码和在- (instancetype)initWithFrame:(CGRect)frame方法中设置self.backgroundColor = [UIColor clearColor];
效果差不多。
尝试一番,最后发现是由于在使用自定义UI控件的地方设置了backgroundColor 所致,就像这样:

红框中的那句就是凶手,所以我改用自定义属性设置背景色了。
原因分析
查看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属性会影响渲染,导致上色不能成功。详细的渲染过程我也说不上来,有谁知道的话,还请教教我。