得到了这段代码:
[self setQRCodeScannerMode:false];
[self.activityIndicator startAnimating];
TBXMLSuccessBlock successBlock = ^(TBXML *tbxmlDocument) {
if ([[TBXML elementName:tbxmlDocument.rootXMLElement] isEqualToString:@"xxxxxx"]){
[self setQRCodeScannerMode:true];
} else {
[self setQRCodeScannerMode:true];
}
};
问题是当我在方法[setQRCodeScannerMode]中将扫描模式设置为true时,我正在停止活动指示器。 但是惊喜!!!几秒钟后,活动指示器仍在工作并且弄乱我的视线。
我该怎么办?
答案 0 :(得分:2)
您需要在完成块中停止活动指示器:
[self setQRCodeScannerMode:false];
[self.activityIndicator startAnimating];
TBXMLSuccessBlock successBlock = ^(TBXML *tbxmlDocument) {
if ([[TBXML elementName:tbxmlDocument.rootXMLElement] isEqualToString:@"xxxxxx"]){
[self setQRCodeScannerMode:true];
} else {
[self setQRCodeScannerMode:true];
}
[self.activityIndicator stopAnimating];
};
这假设在主线程上调用了完成块。如果无法保证在主线程上调用完成块,则可以执行以下操作:
[self setQRCodeScannerMode:false];
[self.activityIndicator startAnimating];
TBXMLSuccessBlock successBlock = ^(TBXML *tbxmlDocument) {
if ([[TBXML elementName:tbxmlDocument.rootXMLElement] isEqualToString:@"xxxxxx"]){
[self setQRCodeScannerMode:true];
} else {
[self setQRCodeScannerMode:true];
}
if ([NSThread isMainThread]) {
[self.activityIndicator stopAnimating];
} else {
dispatch_async(dispatch_get_main_queue(), ^{
[self.activityIndicator stopAnimating];
});
}
};
答案 1 :(得分:1)
你应该调用[self.activityIndicator stopAnimating];在你完成它之后,如果那不适合你,试试这个!
[self.activityIndicator performSelector:@selector(stopAnimating) withObject:nil afterDelay:0.1];
希望有帮助!
答案 2 :(得分:0)
您可以做的一件事是在不同的线程上使用指标,即不在主线程上。您可以使用NSOperationQueue和NSInvocationOperation
答案 3 :(得分:0)
只需在块
之后添加此代码即可 [self.activityIndicator stopAnimating];