我正在尝试在上传文件时制作 Activity 指示器,所以我找到了很多解决方案,但是我想我并不完全了解它们,因此我的代码如下所示:
- (void) startSpinner {
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[spinner setCenter:CGPointMake(self.view.frame.size.width/2.0, self.view.frame.size.height/2.0)];
[self.view addSubview:spinner];
[spinner startAnimating];
}
- (void)startSync {
[NSThread detachNewThreadSelector:@selector(startSpinner) toTarget:self withObject:nil];
// computations
[self.spinner stopAnimating];
}
因此,在我执行[self startSync]之后,activityIndicator出现,但是在上传之后并没有停止。另外,如果我在其他地方(不在(void)startSpinner中)声明 Activity 指示符,例如在viewDidLoad中声明,并且仅执行[self startAnimating],则它根本不会出现。请帮助我找出错误。
最佳答案
您正在不是主线程的线程上执行UI操作。
您永远不要使用执行UI相关任务的选择器来调用detachNewThreadSelector
。
更好,更易理解的方法是:
dispatch_async(dispatch_get_main_queue(), ^{
[self.activityIndicator startAnimating];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Perform lengthy operations
dispatch_async(dispatch_get_main_queue(), ^{
[self.activityIndicator stopAnimating];
});
});
});
另外,如果您选择使用选择器,请确保UIActivityIndicatorView声明在方法范围之外。
关于ios - 计算后ActivityIndicator不会停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14702698/