2016-01-29 90 views
0

我希望View Controller中的步进器在每次单击它时更新我自定义的UIView中的颜色。我不确定问题是由类的实例引起的,还是变量的值(redd1,greenn1bluee1)未被更改。Swift UIView自定义视图在ViewController动作后不会更新

这是我的第一个文件:

class ViewController: UIViewController { 
    var colors = UIView1(); 
    @IBOutlet var redStepper: UIStepper! 
    @IBOutlet var greenStepper: UIStepper! 
    @IBOutlet var blueStepper: UIStepper! 

    @IBAction func redChange(sender: UIStepper) 
    { 
     redValue.text = Int(sender.value).description; 
     colors.redd1 = Double(sender.value); 
     //self.view.setNeedsDisplay() 
    } 
    @IBAction func greenChange(sender: UIStepper) 
    { 
     greenValue.text = Int(sender.value).description; 
     colors.greenn1 = Double(sender.value); 
     //self.view.setNeedsDisplay() 
    } 
    @IBAction func blueChange(sender: UIStepper) 
    { 
     blueValue.text = Int(sender.value).description; 
     colors.bluee1 = Double(sender.value); 
     //self.view.setNeedsDisplay() 
    } 
} 

这是我的第二个文件:

class UIView1: UIView { 
    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 circle = UIView(frame: CGRect(x: -75.0, y: -40.0, width: 200.0, height: 200.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

drawRect添加视图时才会被调用,所以在你的榜样,drawRect被调用一次,而不是在改变步进器之后。

相反,你的步进文件更改为:

@IBOutlet var redStepper: UIStepper! 
@IBOutlet var greenStepper: UIStepper! 
@IBOutlet var blueStepper: UIStepper! 

@IBAction func redChange(sender: UIStepper) { 
    redValue.text = Int(sender.value).description; 
    colors.redd1 = Double(sender.value); 
    updateColor() 
} 

@IBAction func greenChange(sender: UIStepper) { 
    greenValue.text = Int(sender.value).description; 
    colors.greenn1 = Double(sender.value); 
    updateColor() 
} 

@IBAction func blueChange(sender: UIStepper) { 
    blueValue.text = Int(sender.value).description; 
    colors.bluee1 = Double(sender.value); 
    updateColor() 
} 

然后添加updateColor功能,以您的UIView1类:

class UIView1: UIView { 

    var redd1 = 0.0; 
    var greenn1 = 0.0; 
    var bluee1 = 0.0; 

    func updateColor() { 
     let circle = UIView(frame: CGRect(x: -75.0, y: -40.0, width: 200.0, height: 200.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

遗憾的是它没有工作,但欣赏它 – Steve

+0

首先,尝试添加在您的IBActions中打印(sender.value)以确保您收到正确的值。如果发生这种情况,请将print(redd1),print(greenn1)和print(bluee1)添加到updateColor()函数中,以查看是否接收值或运行。 –

+0

不错的主意。我试了一下,我所有的价值都被接收了。 – Steve

相关问题