在我的应用中,我从数据库中获取数据。我从数据库获得的数据非常大,如20000条记录。所以,我想显示一个活动指示器来指示数据正在加载。但是当我运行应用程序时,活动指示器没有显示。
我为此发送代码。请帮帮我。
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
activityIndicator.frame = CGRectMake(100,100, 20, 20);
[self.view addSubview:activityIndicator];
[activityIndicator startAnimating];
// Code to get data from database
[activityIndicator stopAnimating];
答案 0 :(得分:3)
首先,您不需要为activiyIndicator设置框架。你可以设置中心......
activityIndicator.center = self.view.center; (or soemthing like this).
其次,您如何检索数据?你是在主线上做的吗?或者你是异步做的吗?
:: EDIT ::
啊,看来你正在这样做......
[actInd startAnimating];
[self getData]; //this is asynchronous
[actInd stopAnimating];
如果是这种情况,则几乎立即调用stopAnimating。
你需要的是这样......
[actInd startAnimating];
[self getData]; //this is asynchronous
然后在getData ...
- (void)getData
{
//get all your data and process it....
[actInd stopAnimating];
}
这样,只有在完成所有数据工作后才会调用停止动画。
如果这不起作用,请尝试完全删除stopAnimating以检查它实际上是否为动画。
答案 1 :(得分:0)
这样做:
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
activityIndicator.center = self.view.center;
[self.view addSubview:activityIndicator];
[NSThread detachNewThreadSelector:@selector(startActivityIndicator) toTarget:self withObject:nil];
添加此方法:
-(void)startActivityIndicator
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[activityIndicator startAnimating];
[pool release];
}
进行更改:
- (void)getData
{
//get all your data from database.
[activityIndicator stopAnimating];
}
答案 2 :(得分:0)
@Fogmeister是关于设置activityIndicator框架的。
并且为了显示activityIndicator,只需创建问题中显示的代码的一个函数,并使用performSelector:withObject:afterDelay:
调用它,延迟为0.001,并显示activityIndicator
快乐编码:)