0

我正在实现似乎是 iOS 活动指示器的标准代码,但它没有显示。这就是我所做的,遵循这里的建议:

viewDidLoad

indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
indicator.frame = CGRectMake(0, 0, 80.0, 80.0);
indicator.hidden = NO;
indicator.center = self.view.center;
[self.view insertSubview:indicator atIndex:100]; // to be on the safe side
[indicator bringSubviewToFront:self.view];
[UIApplication sharedApplication].networkActivityIndicatorVisible = TRUE;

然后在viewWillAppear,就在调用我的长流程方法之前:

[NSThread detachNewThreadSelector:@selector(threadStartAnimating:) toTarget:self withObject:nil];

我的线程开始动画:

-(void)threadStartAnimating:(id)data
{
    [indicator startAnimating];
}

然后我有一个 Parse.com 方法在后台做一些工作:

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {       
    if(!error) {
        // do some work
        [indicator stopAnimating];
    }
}

据我所知,这应该可行。但事实并非如此。我错过了什么?

4

2 回答 2

1

每当您想要操作您的视图(即 addSubview 等)时,最好在 viewWillAppear 中进行。viewDidLoad 操作视图还为时过早,因为其他方法仍会改变它(即 setFrame)。

因此,将您当前的代码从 viewDidLoad 移动到 viewWillAppear 应该可以解决问题!

于 2014-01-03T22:28:12.017 回答
0

startAnimating应该在主线程上调用,而不是在新线程中调用。所以只需调用[indicator startAnimating];.viewWillAppear

于 2014-01-03T16:22:30.207 回答