【问题标题】:How do I update my instance variables in swift?如何快速更新我的实例变量?
【发布时间】:2016-01-28 22:19:31
【问题描述】:

我希望在单击步进器时改变圆圈的颜色。我认为问题在于我正在使用该类的一个实例。

这是我的第一个文件:

类视图控制器:UIViewController {

@IBOutlet var redValue: UILabel!
@IBOutlet var greenValue: UILabel!
@IBOutlet var blueValue: UILabel!

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

var redd = 0.0;
var greenn = 0.0;
var bluee = 0.0;

@IBAction func redChange(sender: UIStepper)
{
    redValue.text = Int(sender.value).description;
    redd = sender.value;
}
@IBAction func greenChange(sender: UIStepper)
{
    greenValue.text = Int(sender.value).description;
    greenn = sender.value;
}
@IBAction func blueChange(sender: UIStepper)
{
    blueValue.text = Int(sender.value).description;
    bluee = sender.value;
}

}

这是我的第二个文件:

类 UIView1: UIView {

var colors = ViewController();

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(colors.redd)/255), 
           green: (CGFloat(colors.greenn))/255, blue: (CGFloat(colors.bluee))/255, alpha: 1.0)
    circle2.backgroundColor = startingColor2;
    addSubview(circle2);    
}

}

【问题讨论】:

    标签: ios swift uiview uiviewcontroller


    【解决方案1】:

    可能存在各种连接问题,因为我们看不到该代码/IB。但是,我怀疑您至少错过了通知视图需要重绘自身的调用,因为基础值已更改。

    self.view.setNeedsDisplay()
    

    这是我用来试验的整个游乐场,对您的代码进行了各种修改。检查最后一个副本以查看更改。注意:UI 元素并没有真正创建,我在手动设置UIStepper.value 后模拟了一个光滑。

    import UIKit
    
    class ViewController: UIViewController {
    
        @IBOutlet var redValue: UILabel!
        @IBOutlet var greenValue: UILabel!
        @IBOutlet var blueValue: UILabel!
    
        @IBOutlet var redStepper: UIStepper!
        @IBOutlet var greenStepper: UIStepper!
        @IBOutlet var blueStepper: UIStepper!
    
        var redd = 100.0;
        var greenn = 100.0;
        var bluee = 100.0;
    
        @IBAction func redChange(sender: UIStepper)
        {
            redValue?.text = Int(sender.value).description
            redd = sender.value
            self.view.setNeedsDisplay()
        }
        @IBAction func greenChange(sender: UIStepper)
        {
            greenValue.text = Int(sender.value).description
            greenn = sender.value
        }
        @IBAction func blueChange(sender: UIStepper)
        {
            blueValue.text = Int(sender.value).description
            bluee = sender.value
        }
    }
    
    
    class UIView1: UIView {
    
        var colors = ViewController()
    
        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(colors.redd/255.0),
                green: (CGFloat(colors.greenn))/255,
                blue: (CGFloat(colors.bluee))/255,
                alpha: 1.0)
            circle2.backgroundColor = startingColor2;
            addSubview(circle2);    
        }
    }
    
    let v = UIView1(frame: CGRectMake(0,0,400, 240))
    v.colors.view = v
    
    let rstepper = UIStepper(frame: CGRectMake(0,0,300,50))
    rstepper.maximumValue = 255.0
    rstepper.value = 240.0
    v.colors.redChange(rstepper)
    
    
    // inspect the view now:
    v
    

    【讨论】:

      【解决方案2】:

      是的,确实是这个问题。

       var colors = ViewController()
      

      创建一个与包含您的视图的视图控制器的实例无关的新实例。在视图的 drawrect 代码中对 colors.redd 的引用未到达活动视图控制器。

      关系应该在另一个方向。您的视图控制器应该知道您的自定义视图的实例(通常通过插座),它应该设置您的视图的颜色属性或至少作为它的一种委托。

      【讨论】:

        猜你喜欢
        • 2015-02-16
        • 2019-01-30
        • 1970-01-01
        • 2021-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-26
        • 1970-01-01
        相关资源
        最近更新 更多