【问题标题】:ProgressView progress stuck at 1.0 or 0.0ProgressView 进度卡在 1.0 或 0.0
【发布时间】:2020-10-11 15:07:53
【问题描述】:

我是 Swift 的新手,但我在使用 progressView 时遇到了麻烦。 我用

启动我的 ProgressView timeBar
self.timeBar.setProgress(10.0, animated: true)

然后我尝试在 10 秒内(介于 0.0 和 1.0 之间)获取 timeBar 的值:

print(timeBar.progress) 

但我得到 1.0 或 0.0 任何 timeBar 是沿着 progressView。我在发布前获得 0.0,在其他任何地方获得 1.0。

那么如何赶上进度呢?谢谢;)

【问题讨论】:

  • 您是否正在更新主线程中的进度条并将其分派到主线程?
  • 感谢您的回答。坦率地说,我不知道......我太新了,不知道它在哪个线程中!可能有办法知道吗?再次感谢。
  • 好的,如果您不确定 GCD(Grand Central Dispatch)是什么,那么我们将需要更多上下文。你用什么来更新你的进度?计时器、下载、上传还是其他?根据更新的内容,进度条将决定我们的答案。
  • 事实上我只是使用 self.timeBar.setProgress(10.0, animated: true) 启动了它。没有计时器,没有下载也没有上传。该条在 10 秒内出现动画,没有问题。但是我从 progress 属性中得到的值始终是 1.0。

标签: swift uiprogressview


【解决方案1】:

好的,在界面生成器中,您可以为进度条设置最小值-最大值。默认情况下,它是 0.0 到 1.0 作为浮点数。您需要将其更改为 0.0 as min 到 10.0 as max。那我稍微解释一下。该方法.setProgress() 只是设置它并为其设置动画。无法从该进度条获取当前的值,因为该值是立即设置的,然后动画运行,动画不会随时间改变进度值。进度首先为 0,然后设置为 1,然后像设置了值一样进行动画处理。

处理此问题以便获取值的正确方法是使用计时器、下载、上传或其他指示真正“进度”的方法。例如,从 1 秒进步到 10 秒,每一秒是 10 的 0.1 或 10%。这是一个简单的例子。另一个示例可能是 UIButton 单击,它会将进度值提高 1.0。

var timer = Timer()

func updateProgress() {
    timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timerUpdate), userInfo: nil, repeats: false)
} 

@objc func timerAction(){
   if timeBar.progress >= 10.0 {
       timer.invalidate()
       return
   }


   timeBar.setProgress(timebar.progress + 1.0, animated: true)
}

【讨论】:

  • 非常感谢!我认为有办法获得价值!奇怪的是做不到!那我就用你的方法:) 再次感谢!
猜你喜欢
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多