我的drawRect函数不会更新

时间:2016-01-30 20:32:34

标签: swift view viewcontroller geometry drawrect

当我的ViewController中的步进器更改变量(redd1,greenn1,bluee1)时,我希望更新圆的颜色值。原始圆圈由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);
}

1 个答案:

答案 0 :(得分:0)

我在Swift方面不太好,但这是我木头做的一个简单方法:

    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。