我正在使用一个可在线解析提要的应用程序。当我单击刷新按钮时,需要一些时间来重新分析文件并显示其数据。单击刷新按钮时,我希望 View 中间有一个 Activity 指示器。解析完成后,该指示符应该隐藏起来。
我正在使用此代码,但无法正常工作:
- (IBAction)refreshFeed:(id)sender
{
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[self.view addSubview:spinner];
[spinner startAnimating];
// parsing code code
[spinner release];
}
最佳答案
通常,需要将UIActivityIndicator放入与长进程(解析提要)分开的单独线程中,以便出现。
如果要将所有内容都保留在同一线程中,则需要给指示符时间显示。 This Stackoverflow question解决了在代码中放置延迟的问题。
编辑:两年后,我认为任何时候您使用延误使某件事发生时,您都可能做错了。这是我现在要执行的任务:
- (IBAction)refreshFeed:(id)sender {
//main thread
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; [self.view addSubview:spinner];
//switch to background thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
//back to the main thread for the UI call
dispatch_async(dispatch_get_main_queue(), ^{
[spinner startAnimating];
});
// more on the background thread
// parsing code code
//back to the main thread for the UI call
dispatch_async(dispatch_get_main_queue(), ^{
[spinner stopAnimating];
});
});
}
关于ios - 如何以编程方式在 View 中间创建事件指示器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5103227/