理论上,您可以通过以下方式轻松设置背景颜色:
self.backgroundColor = [UIColor redColor];
Run Code Online (Sandbox Code Playgroud)
在drawRect中,但这没有任何效果.您可以更改视图的大小,边框,子视图等,但不能更改背景颜色.类似的SO查询建议添加一个subView或更改initWithFrame或initWithCoder初始化消息中的backgroundColor.我的问题是,当其他特征可以改变时,为什么它在drawRect中不起作用?
更改视图的图层backgroundColor也没有做任何事情,也许是出于同样的原因.视图的backgroundColor与其图层的backgroundColor之间有什么关系,因为它们不一样?
Rob*_*Rob 25
如果您backgroundColor在首次配置视图时进行设置(即在 OS调用之前drawRect),backgroundColor则无需任何其他代码即可使用该视图.正如UIViewClass Reference所说,该backgroundColor属性用于"设置视图的颜色而不是自己绘制颜色".
但是如果您尝试将其设置为drawRect,则已经执行了背景填充,因此您不会立即看到更改背景颜色的效果(除非您自己手动执行另一次填充drawRect).该drawRect方法应该用于渲染视图,而不是用于配置它.
如果UIView设置backgroundColor正在配置视图(例如,无论init您使用哪种方法),将使用该背景颜色,而无需执行任何其他操作drawRect.
正如Rob在他的回答中所说,当drawRect调用该方法时已经绘制了背景.如果此时需要更改背景颜色,则必须自己绘制:
[self.backgroundColor setFill];
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
Run Code Online (Sandbox Code Playgroud)
因此,您仍然可以更改属性的值,但在再次绘制视图之前不会使用它.
| 归档时间: |
|
| 查看次数: |
10884 次 |
| 最近记录: |