【问题标题】:swift UIActivityIndicatorView .hidden = false not workingswift UIActivityIndi​​catorView .hidden = false 不工作
【发布时间】:2014-09-09 12:52:49
【问题描述】:

我试图在按下按钮后显示活动指示器视图,但它不想显示。如果我根本不将其设置为隐藏,它会显示,当我尝试隐藏它时,它会隐藏。但是如果隐藏了就不会再显示了。

代码如下:

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    loading.hidden = true
}

@IBAction func submit() {
    loading.hidden = false
    loading.startAnimating()
    if chosenCategory == "" || txtName.text == "" || txtEmail.text == ""    {
        loading.stopAnimating()
        loading.hidden = true
    } else {
        println("animation")

无论如何,停止动画都有效,它可以隐藏,但无论我做什么,它似乎只是跳过loading.hidden = false并直接打印消息。

会发生什么?

【问题讨论】:

  • 这里没有等待 - 同一函数中的每一行,除非您使用类似 sleep() 或某种异步调用之类的东西,否则将立即一个接一个地执行。这不像 loading.startAnimating() 会被调用,事情会继续,然后过一会儿剩下的事情就会发生。它们几乎会一个接一个地在瞬间发生。向我们展示更多上下文代码。
  • 不,等待,... 是其他代码所在的位置。它调用服务器,并且有一个等待期(请求)。然后我什至用不同的方法尝试过它们
  • 向我们展示其余的代码 - 否则无法帮助您。
  • 代码很多,200多行。但我会尝试发布相关的内容......
  • 点击提交时,如果if语句为真,会立即隐藏加载。人们确实想提供帮助,但您需要提供足够的信息。

标签: swift xcode6 uiactivityindicatorview xcode6-beta7


【解决方案1】:

我建议根本不要使用 .hidden 属性。请改用 .hidesWhenStopped 属性并将其设置为 true。然后只需调用 .startAnimating() 方法,UIActivityIndi​​catorView 就会自动变为可见并开始动画。调用 .stopAnimating() 方法,UIActivityIndi​​catorView 会自动隐藏。

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    loading.hidesWhenStopped = true //this is all you need to change
}

@IBAction func submit() {
    loading.startAnimating() // becomes visible
    if chosenCategory == "" || txtName.text == "" || txtEmail.text == ""    {
        loading.stopAnimating() // goes into hiding
    } else {
        println("animation")

【讨论】:

  • 如果我将 hidesWhenStopped 设置为 YES,我认为切换隐藏属性与 start/stopAnimating() 相同......但我错了。使用 start/stopAnimating() 效果很好。
  • 这实际上是正确的答案,hiddenproperty 根本不适用于UIActivityIndicatorView。我很沮丧人们在这里回答问题,甚至手头没有经过测试的问题。
【解决方案2】:

使用 GCD(Grand Central Dispatch)例程:

    self.activityIndicator.startAnimating()
    self.activityIndicator.hidden = false

    dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue(), { ()->() in
        ... // your long running code here

        self.activityIndicator.stopAnimating()
    })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多