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; 
    } 
} 
+0

我不认为我理解这个问题。在'awakeFromNib'之后调用'drawRect',所以如果你在两者中都设置它,那么'drawRect'就会覆盖'awakeFromNib' – dan

+0

中的那个,那么为什么我得到的backgroundColor是棕色的,根据你的回答drawRect覆盖awakeFromNib中的一个为什么我没有看到greenColor? –

如何更改层的属性,在添加的drawRect FUNC?

不要。请勿更改drawRect中任何图层的任何属性,也不要在drawRect中添加任何图层。您应该在drawRect中做的唯一事情是视图的内容。此代码:

override func drawRect(rect: CGRect) { 
    self.backgroundColor=UIColor.greenColor(); 
    self.layer.cornerRadius=5; 
} 

......是错的。删除它。

+0

感谢您的回复,O.K我不会......但您并没有真正回答我的问题或给出了一个很好的解释。如果我不应该这样做,而不是为什么当我从代码中删除awakeFromNiv func我可以看到drawRect func中按钮的图层属性设置和工作,并且运行代码后没有任何错误? –

+0

我没有说删除'awakeFromNib'。 'awakeFromNib'是用图层和背景色配置视图的好地方。 'drawRect'不是。 – matt