UISlider ValueChanged操作不起作用

时间:2016-11-10 06:56:18

标签: ios swift

我想用UISlider实时计算一个数字,这是我的方法:

@IBAction func HPsliderValueChanged(_ sender: CustomUISlider) {

    calculator.HPPercentage = Double(HPSlider.value)
    HPValue.text = String(Int(HPSlider.value * 100)) + " %"
    resultLabel.text = String(calculator.calculate())
}

当用户滑动滑块时,HPValue标签和resultLabel都会改变值,但现在只有HPValue标签更改,resultLabel不起作用。

calculator不是零,这是它的代码:

class TurretDiveCalculator {

var hero: Heroes = .taka
var build = [DefenseItems](repeatElement(DefenseItems(name: "Empty Item", index: 0, price: 0, image: #imageLiteral(resourceName: "EmptyItem")), count: 6))
var HPPercentage: Double = 0

func calculate() -> Int {
    let baseHP = hero.HPLow + (hero.HPHigh - hero.HPLow) / 12 * Double(hero.level)
    let baseDefense = hero.armorLow + (hero.armorHigh - hero.armorLow) / 12 * Double(hero.level) + hero.shieldLow + (hero.shieldHigh - hero.shieldLow) / 12 * Double(hero.level)

    var buildHP = 0.0
    var buildDefense = 0.0
    for item in build {
        buildDefense += item.armor
        buildDefense += item.shield
        buildHP += item.HP
    }

    let fullHP = baseHP + buildHP
    var HP = fullHP
    let defense = baseDefense + buildDefense
    var numberOfShots = 0

    while HP > 0 {
        let perShotDamageRaw: Double = 330 + Double(numberOfShots) * 0.09 * fullHP
        let mitigatedDamage: Double = 0.09 * perShotDamageRaw + 0.9 * perShotDamageRaw / (100 + defense) * 100

        HP -= mitigatedDamage
        numberOfShots += 1
    }

    return numberOfShots
}

}

如何让resultLabel的价值实时变化?

1 个答案:

答案 0 :(得分:0)

从聊天中可以看出,我们设法找到了问题。

这个答案只是一些常见的调试技巧和窍门,当出现这样的问题时。

最初的问题是:

  

现在只有HPValue标签发生变化,resultLabel无法正常工作。

让我们找出问题所在。这是代码:

resultLabel.text = String(calculator.calculate())

这里有两件事可能出错:

  1. resultLabel未正确连线。要查看是否是这种情况,请尝试将值设置为普通的'字符串,看看你是否能看到它。我可以,文本字段正确连接。

  2. calculate()方法返回意外值。尝试通过在print

  3. 之前添加return语句来验证方法返回的内容

    正如您在聊天中看到的那样,一旦我们将问题发生隔离,@ bright-future就会更容易追踪问题。

    希望这可以帮助任何人在尝试调试问题时:)