我正在尝试在iPhone应用中创建活动指示器。问题是我无法让它出现在我希望它已经完成的实际任务之前。关于iPhone做什么的顺序有什么时髦吗?
这是我有问题的代码(在我的app委托中):
-(BOOL)showProgressView: (NSString *) message {
self.progress = [[UIView alloc] initWithFrame:window.frame];
UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"squircle.png"]];
[img setAlpha:0.5];
[img setFrame:CGRectMake(94, 173, 133, 133)];
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(51.5, 51.5, 30, 30)];
spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
[img addSubview:spinner];
[self.progress addSubview:img];
[spinner startAnimating];
[img release];
[spinner release];
[window addSubview:self.progress];
return YES;
}
然后我将此代码称为:
if ([appDelegate showProgressView:@"Loading..:"])
{
//My actual code loads data and stuff here but that is not important
//drawCtrl is a UIViewController subclass that is instantiated here
UINavigationController *navController = [appDelegate navigationController];
[navController pushViewController:drawCtrl animated:YES];
[drawCtrl release];
}
问题是我的活动指示器在新视图控制器被推送到navController的堆栈之前不会出现。我能以某种方式控制它吗?
提前致谢!
-Mats
答案 0 :(得分:1)
您需要通过计时器定期调用您的加载方法。 UI更改需要通过事件循环进行查看。我通常在我在AppDelegate中设置的计时器中完成此操作,它每n秒调用一次“methodThatTakesSomeTime”,“methodThatTakesSomeTime”方法对指定的时间片执行一些工作,然后退出通常与计时器大致相同的时间触发时间。这给了事件循环时间来刷新UI,并给你的方法时间来完成它的工作。
花些时间保持“methodThatTakesSomeTime”的状态,以便它可以继续前进,但这就是它所需要的。