微调器在 swift 中不工作

Spinner not working in swift

我在屏幕上添加了一个微调器,但它没有显示。这是我的代码暂停微调器并播放微调器

   func pause() {
    activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
    activityIndicator.center = self.view.center
    activityIndicator.hidesWhenStopped = true
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    view.addSubview(activityIndicator)
    activityIndicator.startAnimating()
    UIApplication.sharedApplication().beginIgnoringInteractionEvents()
}

这是我的恢复方法

func restore() {
    activityIndicator.stopAnimating()
    UIApplication.sharedApplication().endIgnoringInteractionEvents()
}

我已经在 class

中声明了我的微调器
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

这是我调用微调器的地方

override func viewDidLoad() {

   // myarray = [""]
  // var take = NSMutableArray

    pause()
    var query = PFQuery(className:"Questions")
    query.whereKey("Level", equalTo:level)
    query.whereKey("Quiz", equalTo:quiz)
    query.orderByAscending("Ques")

    query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]!, error: NSError!) -> Void in
        if error == nil {
            // The find succeeded.
            println("Successfully retrieved \(objects.count) scores.")

            var i = 0;

            if let objects = objects as? [PFObject] {
                for object in objects {
                    println(object.objectId)
                    let pf = object as PFObject
                    let name = pf["Question"] as String
                    ql.append(name)
                    if (flag1 == 0){
                    myarr.insert(name, atIndex: i)
                    i++;
                    }

                }
            }
            println(myarr);
        } else {
            // Log details of the failure

            println("Error: \(error) \(error.userInfo!)")
            self.performSegueWithIdentifier("error", sender: self)
            let defaults = NSUserDefaults.standardUserDefaults()
            defaults.setBool(false,forKey:"l"+String(level)+"q"+String(quiz))
            defaults.setBool(false,forKey:"l"+String(level)+"p")
        }
        dispatch_async(dispatch_get_main_queue(), {
            self.restore()
        })

    }
    if (flag1==0){
        ques = 1
    }
    questions()
    println(ql)


    super.viewDidLoad()

// 加载视图后进行任何其他设置。 }

您的 ActivityIndi​​cator 以 pause 函数开始,以 restore 函数结束。在 viewDidLoad 中,大部分工作由您定义的块执行,该块 运行 在后台执行。从 pauserestore 的时间会很短。 restore 将 运行 在你的块完成执行之前很久。

如果您希望微调器 运行 直到方块结束,您需要执行类似

的操作
println("Successfully retrieved \(objects.count) scores.")
restore()

在你的街区内。但是,请注意,我不确定您的代码块在哪个线程上执行,而且我不确定从后台线程调用 restore 是否正确。你可以试试。

您的(可能很长 运行)查询作为后台任务运行,因此您的 restore() 将立即被调用。你必须改变两件事:

  1. 将对 restore() 的调用放在后台执行块中
  2. 牢记"The Law":对UI 元素的更新必须在主线程中完成

所以,对于 2. 你必须在主线程中包装 restore()

dispatch_async(dispatch_get_main_queue(), {
    restore()
})