【问题标题】:IOS - in drawRect func layer properties can not be changed?IOS - 在drawRect func层属性不能改变?
【发布时间】:2016-06-21 18:32:45
【问题描述】:

我创建了一个从视图对象(UIButton)继承的类 我不明白为什么当我尝试通过 init 或 awakeFromNib func 更改我在 drawRect func 中添加的 backgroundColor 时,它会成功, 但是当我尝试更改我添加的图层的属性时 在 drawRect 函数(如 self.layer.cornerRadius)中,它不会因 init 或 awakeFromNib 函数而改变。

两个问题: 1.有人可以向我解释幕后发生了什么吗? 2. 如何更改在 drawRect 函数中添加的图层的属性?

对不起,我的英语不稳定 我希望它足够清楚:)

这是我的简单示例代码:

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

【问题讨论】:

  • 我不认为我理解这个问题。 drawRectawakeFromNib 之后被调用,所以如果你同时设置它,那么drawRect 只会覆盖awakeFromNib 中的那个
  • 那么为什么我得到的背景颜色是棕色的,根据你的回答,drawRect 会覆盖 awakeFromNib 中的那个,所以为什么我没有看到 greenColor??

标签: ios swift layer drawrect


【解决方案1】:

如何更改在 drawRect func 中添加的图层的属性?

不要。不要更改drawRect 中任何层的任何属性,也不要在drawRect 中添加任何层。在drawRect 中您应该做的唯一一件事就是绘制 视图的内容。这段代码:

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

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

【讨论】:

  • 感谢您的回复,好吧,我不会……但您并没有真正回答我的问题,也没有给出很好的解释。如果我不应该这样做,为什么当我从代码中删除 awakeFromNiv func 时,我可以看到 drawRect func 中按钮的图层属性已设置并正常工作,并且在运行代码后没有任何错误??跨度>
  • 我没有说删除awakeFromNibawakeFromNib 是使用图层和背景颜色配置视图的好地方。 drawRect 不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
相关资源
最近更新 更多