我正在实施似乎是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];
}
}
我能看到的一切,这应该有效。但事实并非如此。我错过了什么?
答案 0 :(得分:1)
每当你想操纵你的视图(即addSubview等)时,最好在viewWillAppear中这样做。 viewDidLoad操作视图还为时过早,因为其他方法仍会改变它(即setFrame)。
所以将当前代码从viewDidLoad移动到viewWillAppear应该可以解决问题!
答案 1 :(得分:0)
startAnimating
应该在主线程上调用,而不是在新线程中调用。
因此,只需在[indicator startAnimating];
中致电viewWillAppear
即可。