我正在制作一个非常简单的应用程序,以使用GCD练习多线程。我在ViewController类中初始化了一个UIActivityIndi​​catorView,如下所示:

class ViewController: UIViewController {

var myActivityIndicator:UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: .Gray)


在我的viewDidLoad中,我使用以下代码将其作为子视图添加到主视图中:

 override func viewDidLoad()
{
    super.viewDidLoad()

    myActivityIndicator.center = view.center
    view.addSubview(myActivityIndicator)
}


然后,当点击我的按钮时,我有一个IBAction,它会在不久后通过打印一条简单消息来处理事件。这是该代码:

@IBAction func doSomething(sender: AnyObject)
{
    let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
    dispatch_async(dispatch_get_global_queue(priority, 0))
    {
        self.myActivityIndicator.startAnimating()

        sleep(3)

        print("This has been accessed on another thread")

        dispatch_async(dispatch_get_main_queue())
        {
            self.myActivityIndicator.stopAnimating()
        }
    }
}


似乎好像没有调用self.myActivityIndi​​cator.startAnimating(),但是当我将这行代码放入viewDidLoad中时,它就可以正常工作。

我想念什么?

最佳答案

这是通过在主线程上启动动画来解决的:

 @IBAction func doSomething(sender: AnyObject)
{
    self.myActivityIndicator.startAnimating()
...

10-08 12:25