1

由于 Xcode 错误,我正在以编程方式创建一个滑块(当我更改滑块值时不要让我将拇指居中,所以我决定使用代码来做)并且我想要一个变量来保存滑块值. 有没有办法将变量和目标对象与控件相关联,类似于“addTarget”,但它不是一个动作,而是一个变量?我不知道我是否解释了自己,但告诉我是否需要更具体。提前感谢:)帮助我。

这是我的代码:

import UIKit 
class ViewController: UIViewController {
    var slider: UISlider!
    @IBOutlet weak var sliderVar: UISlider!
    var currentSliderValue = 0

    override func viewDidLoad() {
      super.viewDidLoad()
      slider = UISlider(frame: CGRect(x: 98, y: 173, width: 699, height: 30))
      slider.center = self.view.center
      slider.minimumValue = 1
      slider.maximumValue = 100
      slider.value = 50
      slider.isContinuous = true
      slider.addTarget(self, action: #selector(sliderMoved(_:)), for: UIControl.Event.valueChanged)
      self.view.addSubview(slider)
    }

    @IBAction func sliderMoved(_ sender: UISlider) {
      currentSliderValue = lroundf(sender.value)
    }
}

我的函数“sliderMoved”改变了sliderCurrentValue 变量,但是这个变量在我使用滑块并移动它之前不会改变。我还有一个按钮,当你触摸它时,它会显示滑块值,但“sliderCurrentValue”仅在移动滑块时改变它的值。我正在考虑创建一个 IBOutlet 但我不知道如何将它与滑块连接起来。

4

1 回答 1

0

据我了解,您需要将变量绑定到滑块的值。有几种方法可以实现它。有一种方法。使用自定义 setter 和 getter 声明变量

class ViewController: UIViewController {
  var slider: UISlider!

  var sliderValue: Float {
    set {
      // use optional chaining here helps avoid crashes 
      slider?.setValue(newValue, animated: true)
    }
    get {
      // if slider control hasn't created yet you need to return some dummy value
      slider?.value ?? -1
    }
  }

  func viewDidLoad() {
    // your current implementation here
  }
}
于 2021-02-11T07:00:13.343 回答