IOS - 当滑块值改变时设置 UILabel Swift

Posted

技术标签:

【中文标题】IOS - 当滑块值改变时设置 UILabel Swift【英文标题】:IOS - When Slider Value Changed Set UILabel Swift 【发布时间】:2020-10-25 12:04:25 【问题描述】:

我想在uislider更改时设置标签,但是当我在valueChanged中设置标签时,屏幕冻结或父视图消失。

    @IBAction func changedSliderValue(_ sender: UISlider) 
    let value = Int(sliderExtraRepeat.value)
    if lastSliderValue != value 
        self.labelExtraRepeat.text = String(value) + " tekrar daha gelirdi."
        print(String(format: "%.0f", self.sliderExtraRepeat.value))
        lastSliderValue = value
    

当我对带有标签的行进行注释时,滑块可以平滑移动。尽管我挣扎了几个小时,但我还是找不到原因。

【问题讨论】:

【参考方案1】:

首先,是否完全有必要拥有一个全局变量“lastSliderValue”? 如果没有,建议将全局变量整体移除。

试试这个。

    @IBAction func changedSliderValue(_ sender: UISlider) 

// 1. make sure 'Int(sliderExtraRepeat.value)' does not return a value between 0 to 1 
    let value = Int(sliderExtraRepeat.value) 

//2. try this instead.
    labelExtraRepeat.text = String(value) + " tekrar daha gelirdi."

//3. make sure you set UISlider.isContinuous = true

【讨论】:

【参考方案2】:

您是否尝试过在主线程上更新 UI?像这样:-

@IBAction func changedSliderValue(_ sender: UISlider) 
  let value = Int(sliderExtraRepeat.value)
  if lastSliderValue != value 

      DispatchQueue.main.async
        self.labelExtraRepeat.text = String(value) + " tekrar daha gelirdi."
      
      
      print(String(format: "%.0f", self.sliderExtraRepeat.value))
      lastSliderValue = value
  

【讨论】:

以上是关于IOS - 当滑块值改变时设置 UILabel Swift的主要内容,如果未能解决你的问题,请参考以下文章

如何在标签中放置滑块值?

基于滑块值的平滑动画

显示多个滑块值的 UILabel

SwiftUI 滑块值不尊重范围

使用带有 Fontawesome 的 jQuery UI 滑块更改星级

滑块动画时更新标签上的滑块值