我在iPhone界面上有一个执行功能的按钮。功能如下:
-(IBAction)courses:(id)sender {
[loading startAnimating];
[connection getCourses];
[outlet setText:connection.lastResponseData];
}
我的问题是动画只在[outlet setText:connection.lastResponseData
之后开始。如何在此之前启动动画加载?
感谢。
答案 0 :(得分:2)
看起来getCourses
正在阻止主线程;您启动的所有动画都将被删除,直到courses:
返回。修改代码以使用后台线程:
-(IBAction)courses:(id)sender {
[loading startAnimating];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[connection getCourses];
dispatch_async(dispatch_get_main_queue(), ^{
[outlet setText:connection.lastResponseData];
[loading stopAnimating];
});
});
}
这会将阻止网络访问权限放在系统提供的后台GCD队列中,该队列包含后台线程。
答案 1 :(得分:0)
似乎你的连接阻塞了主线程,主线程也负责UI。在connection
启动但未完成时尝试与UI交互,如果它没有响应 - 使连接在另一个线程中运行。
例如,异步NSURLConnection不会阻止您的用户界面。