2015-10-16 91 views
0

我創建了一個新的子視圖類來繪圖 我已經覆蓋函數drawRect(),但我不能改變 子視圖的背景顏色我用背景方法,但它沒有工作!如何在swift中更改子視圖的背景顏色?

import UIKit 

class AbedView:UIView { 
    override func drawRect(rect: CGRect) { 
     let color = UIColor.blueColor() 
     // Do any additional setup after loading the view, typically from a nib. 
     let cgrRect = CGRect(x: 0, y: 0, width: 100, height: 100) 
     let newView = UIBezierPath(rect: cgrRect) 
     print(newView.bounds) 
     color.set() 
     newView.lineWidth = 5 
     newView.stroke() 
     self.backgroundColor = UIColor.blackColor() 



    } 

} 

回答

4

您需要在drawRect之前設置背景顏色。在你調用drawRect的時候,背景已經被繪製出來了。如果您需要能夠在drawRect中設置背景顏色,就可以自己繪製背景顏色,就像繪製藍色矩形輪廓的方式一樣。

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    self.backgroundColor = UIColor.blackColor() 
} 

class AbedView:UIView { 
    override func drawRect(rect: CGRect) { 
     let color = UIColor.blueColor() 
     let cgrRect = CGRect(x: 0, y: 0, width: 100, height: 100) 
     let newView = UIBezierPath(rect: cgrRect) 
     print(newView.bounds) 
     color.set() 
     newView.lineWidth = 5 
     newView.stroke() 
    } 
} 
+0

我試過,但沒有奏效 – abedAssa

0

我創建了一個「準備」功能,我稱之爲視圖時創建的:

class myView: UIView { 
    func prepare() { 
     backgroundColor = UIColor.blueColor() 
    } 

    override func drawRect(rect: CGRect) { 
    // custom stuff 
    } 
} 

用法(此函數返回在的tableview頭以使用新的視圖):

 let myView = myView() 
     myView.prepare() 
     return myView 

我確定有一個更簡潔的方法來做到這一點,但我不想混淆初始值設定項,創建擴展項或者使用圖層。這很簡單,很有效。就我所能看到的唯一缺點是,你不能動態地確定drawrect:time的顏色。但如果你知道初始化過程中的顏色,這應該可以工作。

享受。

1

沿着加里麥金的想法,這爲我工作。我有GameBoardView類別的gameBoard,它是UIView的子類別。

當我做了這樣它不會覆蓋我的故事板設置顏色:

class GameBoardView: UIView { 
    override func drawRect(rect: CGRect) { 
    self.backgroundColor = UIColor.greenColor() 
    } 
} 

但是當我把該行的ViewControllerviewWillAppear()方法,它的工作原理:

class ViewController: UIViewController { 
    // some code 
    override func viewWillAppear(animated: Bool) { 
    // more code 
    gameBoard.backgroundColor = UIColor.greenColor() 
    // some other code 
    } 
    // still more code 
} 

希望它有幫助

1

您不必在創建此視圖時設置背景顏色。

創建視圖之後的任何時間,只需調用視圖這行代碼,它的背景顏色將變爲

view.backgroundColor = UIColor.blackColor()