2016-06-21 19 views
-2

我創建了一個類,從視圖對象(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? –

回答

1

如何更改層的屬性,在添加的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

相關問題