我正在尝试在上传文件时制作 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]之后,activityIndi​​cator出现,但是在上传之后并没有停止。另外,如果我在其他地方(不在(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];
        });
    });
});

另外,如果您选择使用选择器,请确保UIActivityIndi​​catorView声明在方法范围之外。

关于ios - 计算后ActivityIndi​​cator不会停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14702698/

10-08 20:57