2016-01-30 51 views
0

我希望當我的ViewController中的步進器更改變量(redd1,greenn1,bluee1)時更新圓的顏色值。原始圓圈由drawRect繪製。我的drawRect函數不會更新

var redd1 = 0.0; 
var greenn1 = 0.0; 
var bluee1 = 0.0; 
override init(frame: CGRect) 
{ 
    super.init(frame: frame) 
} 
required init?(coder aDecoder: NSCoder) 
{ 
    super.init(coder: aDecoder) 
} 

override func drawRect(rect: CGRect) 
{ 
    let circle2 = UIView(frame: CGRect(x: -25.0, y: 10.0, width: 100.0, height:100.0)) 
    circle2.layer.cornerRadius = 50.0 
    let startingColor2 = UIColor(red: (CGFloat(redd1))/255, green: (CGFloat (greenn1))/255, blue: (CGFloat(bluee1))/255, alpha: 1.0) 
    circle2.backgroundColor = startingColor2; 
    addSubview(circle2); 
} 

我試着創建一個新的函數,在舊的函數上繪製一個新的圓。它由步進器調用。新的函數updateColor()從步進器接收新值。這部分工作,因爲它打印出正確的新值,但從不畫新的圓。

func updateColor() 
{ 
    let circle = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0)) 
    circle.layer.cornerRadius = 50.0; 
    let startingColor = UIColor(red: (CGFloat(redd1))/255, green: (CGFloat(greenn1))/255, blue: (CGFloat(bluee1))/255, alpha: 1.0) 
    circle.backgroundColor = startingColor; 
    addSubview(circle); 
} 

回答

0

我不是斯威夫特那麼好,但是這是一個簡單的方法,我木如何做到這一點:

var circle2: UIView 

    override func drawRect(rect: CGRect) { 
     circle2 = UIView(frame: CGRect(x: -25.0, y: 10.0, width: 100.0, height:100.0)) 
     circle2.layer.cornerRadius = 50.0 
     let startingColor2 = UIColor(red: (CGFloat(redd1))/255, green: (CGFloat (greenn1))/255, blue: (CGFloat(bluee1))/255, alpha: 1.0) 
     circle2.backgroundColor = startingColor2; 
     addSubview(circle2); 

    } 

    @IBAction valueChanged(sender: UIStepper) { 
     changeColor(color(the Color you want), Int(the Int value you want the color to change at)) 
    } 

    func changeColor(color: UIColor, number: Int) { 
     if stepper.value == number { 
      circle2.backgroundColor = color 
     } 
    } 

你必須創建一個IBAction爲該類型值的改變步進和呼叫每種顏色的方法以及它對於步進器的IBAction都屬於Int。所以每次在步進器上按+或 - 時,IBAction調用changeColor方法,changeColor方法測試哪種顏色應該設置爲circle2。