我正在制作一个非常简单的应用程序,以使用GCD练习多线程。我在ViewController类中初始化了一个UIActivityIndicatorView,如下所示:
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.myActivityIndicator.startAnimating(),但是当我将这行代码放入viewDidLoad中时,它就可以正常工作。
我想念什么?
最佳答案
这是通过在主线程上启动动画来解决的:
@IBAction func doSomething(sender: AnyObject)
{
self.myActivityIndicator.startAnimating()
...