過程
因?yàn)橛X得ios-charts有點(diǎn)重壁查,就想自己封裝個(gè)圖表供自家App使用剔应,沒那么多代碼量,還可以高度定制化峻贮。如題所述,遇到這么個(gè)問題挂捻,任我怎么設(shè)置backGroundColor船万;它就是一團(tuán)黑刻撒。
IMG_0168.PNG
使用這一段代碼也沒有什么效果声怔。
[[UIColor colorWithWhite:29/255.f alpha:1.0] setFill];
UIRectFill(rect);
上面這段代碼和在- (instancetype)initWithFrame:(CGRect)frame方法中設(shè)置self.backgroundColor = [UIColor clearColor];
效果差不多舱呻。
嘗試一番,最后發(fā)現(xiàn)是由于在使用自定義UI控件的地方設(shè)置了backgroundColor 所致箱吕,就像這樣:
屏幕快照 2019-03-28 17.53.05.png
紅框中的那句就是兇手,所以我改用自定義屬性設(shè)置背景色了兆旬。
原因分析
查看UIView的頭文件,發(fā)現(xiàn)這個(gè)屬性的默認(rèn)值是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()中獲取上下文時(shí)宝鼓,這個(gè)屬性肯定已經(jīng)有值了。測試一番蛉签,當(dāng)我把那句改成給layer的背景上色,顯示就如預(yù)期了碍舍。
scatter.layer.backgroundColor = [UIColor greenColor].CGColor;
由此可見邑雅,當(dāng)使用CGContextRef獲取上下文畫圖時(shí),UIView的backgroundColor屬性會影響渲染淮野,導(dǎo)致上色不能成功。詳細(xì)的渲染過程我也說不上來骤星,有誰知道的話,還請教教我舆吮。