ios - Swift UIView 自定义 View 在 ViewController 操作后不会更新

标签 ios swift uiview instance viewcontroller

我希望 View Controller 中的步进器在每次单击时更新我的​​自定义 UIView 中的颜色。我不确定问题是由于类的实例还是变量的值(redd1greenn1bluee1 >) 没有被改变。

这是我的第一个文件:

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);
    }
}

最佳答案

drawRect 仅在添加 View 时调用,因此在您的示例中,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);
    }
}

关于ios - Swift UIView 自定义 View 在 ViewController 操作后不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35092753/

相关文章:

ios - 如何计算 UIImage 的平均颜色?

iphone - 为什么我的动画不起作用?

ios - 如何使用动态 View iOS Swift 处理导航?

ios - 自定义 View 第一次不会出现

iphone - 在 UIPopover 中停止 NSTimer

ios - 插页式广告的 iAd 自定义过渡

Swift:断开 AVAudioUnit 与播放 AVAudioEngine 的连接

ios - 如何将第二个 View 呈现为全屏?

android - 未找到 react native 命令

ios - 在 Objective C 中缩小类型 UIView