相互依赖的变量不更新

时间:2020-03-13 15:01:51

标签: swift

我正尝试从滑块获取值并将其存储在变量中,然后更改两个正方形的大小,如下面的代码所示。我正在更新years变量,但是由于某种原因,mfProportionifProportion变量没有更新,因为正方形的大小没有变化。如果有人可以看一下,让我知道我哪里出了问题,我将非常感激。谢谢。

import UIKit

class ViewControllerX: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        print("showing index vs mutual box view")
        addSquares()
    }



    func addSquares() {

        let x = Double(self.view.center.x)
        let y = Double(self.view.center.x)

        let years:Double = 1
        //let mfDollarReturn:Double = pow(1.078, years)
        //let ifDollarReturn:Double = pow(1.098, years)
        //let bankDollarReturn:Double = pow(1.017, years)
        let mfProportion:Double = ((pow(1.078, years))/(pow(1.098, years)))
        let savingsProportion:Double = ((pow(1.017, years))/(pow(1.098, years)))

        view.backgroundColor = UIColor.white
        let indexSquare = UILabel(frame: CGRect(x: 0, y: 0, width: 250, height: 250))
        indexSquare.text = ""
        indexSquare.center = CGPoint(x: x, y: y)
        indexSquare.backgroundColor = UIColor.green
        view.addSubview(indexSquare)
        let indexSquareArea:Double = (250*250)

        let mutualSquareDimension:Double = pow((indexSquareArea * mfProportion), 0.500)
        let mutualSquare = UILabel(frame: CGRect(x: 0, y: 0, width: mutualSquareDimension, height: mutualSquareDimension))
        mutualSquare.center = CGPoint(x: x-(125.00-mutualSquareDimension/2.00), y: y+(125.00-mutualSquareDimension/2.00))
        mutualSquare.backgroundColor = UIColor.yellow
        view.addSubview(mutualSquare)

        let bankSquareDimension:Double = pow((indexSquareArea * savingsProportion), 0.500)
        let bankSquare = UILabel(frame: CGRect(x: 0, y: 0, width: bankSquareDimension, height: bankSquareDimension))
        bankSquare.center = CGPoint(x: x-(125.00-bankSquareDimension/2.00), y: y+(125.00-bankSquareDimension/2.00))
        bankSquare.backgroundColor = UIColor.red
        view.addSubview(bankSquare)

        slider.center = CGPoint(x: self.view.center.x, y: self.view.center.y * 1.5)
        slider.maximumValue = 100
        slider.minimumValue = 1
        slider.value = 1
        view.addSubview(slider)
        slider.addTarget(self, action: #selector(changeValue), for: .touchUpInside)
    }
    let slider = UISlider(frame: CGRect(x: 0, y: 0, width: 300, height: 5))

    @objc func changeValue() {
        let years = Int(slider.value)
        print(years)
    }
}

1 个答案:

答案 0 :(得分:0)

此处设置let years = Int(slider.value)不会更改正方形的大小,您需要根据新值重新设置帧

@objc func changeValue() {
    let years = Int(slider.value)
    print(years)
    // change frames again
}

因此,我强烈建议您创建一个函数,将各项添加为子视图,另外一个函数则根据year值更改框架,然后从viewDidLoadchangeValue中使用{{ 1}}值作为参数