IOS - 在drawRect中func图层的属性不能改变?
我创建了一个类,从视图对象(UIButton的) 继承我不明白,为什么当我试图改变,我在drawRect中FUNC由init或awakeFromNib FUNC它成功添加的backgroundColor, 但时我试图改变我在drawRect func中添加 的属性(如self.layer.cornerRadius),它不会被init或awakeFromNib func改变。IOS - 在drawRect中func图层的属性不能改变?
两个问题: 1.有人可以向我解释幕后发生了什么? 2.如何更改在drawRect func中添加的图层的属性?
对不起,我的英语不稳 我希望这是足够清晰:)
这里是我的简单示例代码:
import UIKit
class Btn:UIButton {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder);
self.backgroundColor=UIColor.cyanColor();
self.layer.borderWidth=1;
}
override func awakeFromNib() {
self.backgroundColor=UIColor.brownColor(); // it was changed to brown
self.layer.borderWidth=3; // it changed to 3
self.layer.cornerRadius=20;// it doesn't changed to 20
// it's stay 5 from drawRect func (down here) whyyy???
}
override func drawRect(rect: CGRect) {
self.backgroundColor=UIColor.greenColor();
self.layer.cornerRadius=5;
}
}
如何更改层的属性,在添加的drawRect FUNC?
不要。请勿更改drawRect
中任何图层的任何属性,也不要在drawRect
中添加任何图层。您应该在drawRect
中做的唯一事情是图视图的内容。此代码:
override func drawRect(rect: CGRect) {
self.backgroundColor=UIColor.greenColor();
self.layer.cornerRadius=5;
}
......是错的。删除它。
感谢您的回复,O.K我不会......但您并没有真正回答我的问题或给出了一个很好的解释。如果我不应该这样做,而不是为什么当我从代码中删除awakeFromNiv func我可以看到drawRect func中按钮的图层属性设置和工作,并且运行代码后没有任何错误? –
我没有说删除'awakeFromNib'。 'awakeFromNib'是用图层和背景色配置视图的好地方。 'drawRect'不是。 – matt
我不认为我理解这个问题。在'awakeFromNib'之后调用'drawRect',所以如果你在两者中都设置它,那么'drawRect'就会覆盖'awakeFromNib' – dan
中的那个,那么为什么我得到的backgroundColor是棕色的,根据你的回答drawRect覆盖awakeFromNib中的一个为什么我没有看到greenColor? –