2015-09-09 63 views
0

我想將swift中的顏色數組傳遞給drawRect,我該怎麼做? (我得到了很多錯誤..)將變量傳遞到swift中的drawRect

class GradientColorView : UIView { 

    static let colors : NSArray = NSArray() 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
    } 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    class func initWithColors(colors :NSArray) { 

    } 

    override func drawRect(rect: CGRect) { 

     println(self.colors) 
     println("drawRect has updated the view") 
    } 
} 

回答

3

你的類有顏色作爲靜態變量,它就像一個類變量,它是讓這意味着是不變的常量。如果你希望它可以被修改,你需要改變它。所以,你不能從實例訪問它。我建議你將它改爲實例變量,以便在顏色更改時輕鬆地繪製調用。

你可以做這樣的事情,

class GradientColorView : UIView { 

    var colors : NSArray = NSArray() { 
     didSet { 
      setNeedsDisplay() 
     } 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
    } 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder)! 
    } 

    class func initWithColors(colors :NSArray) { 

    } 

    override func drawRect(rect: CGRect) { 

     println(self.colors) 
     println("drawRect has updated the view") 
    } 
} 

然後你就可以更新從gradientView實例的顏色,這將再次重繪

let gradientView = GradientColorView(frame: CGRectMake(0, 0, 200, 200)) 
gradientView.colors = [UIColor.redColor(), UIColor.orangeColor(), UIColor.purpleColor()] 
+0

非常感謝你的人,你解決了我這個問題,我也學到了一些新東西! –