我想在更改视图时在我的iphone上显示UIActivityIndicatorView。 我写了以下代码:
- (void)viewDidLoad
{
spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
[spinner setCenter:CGPointMake(320/2.0, 460/2.0)]; // I do this because I'm in landscape mode
[self.view addSubview:spinner];
}
并且在按钮的点击事件中我想要更改视图,在那段时间我想要显示那个指示器所以,我写了
-(IBAction)buttonClick:(id)sender
{
[spinner startAnimating];
ViewController *lController = [[ViewController alloc] initWithNibName: @"View" bundle:nil];
self.viewController = lController;
[lController release];
//
[[self mainController] dismissModalViewControllerAnimated:YES];
[lViewController.view removeFromSuperview];
[self.view addSubview: lController.view];
[spinner stopAnimating];
}
它没有显示指标,所以请告诉我哪里错了?
答案 0 :(得分:1)
UIActivityIndicator在主线程上设置动画(每个运行循环更改动画帧)。如果你开始,执行代码并停止,它永远不会有动画(因为它永远不会退出当前的运行循环)。
尝试在后台线程上运行代码。这将允许主线程处理动画帧。
答案 1 :(得分:0)
在buttonClick
中,您似乎要在微调器的顶部添加lController.view
“(之前在viewDidLoad
中添加)。很难从你的片段中判断模态解雇是怎么回事,所以我们假设这不是罪魁祸首。
您可以尝试在添加新子视图后调用[self.view bringSubviewToFront:spinner]
,或者[self.view insertSubview:lController.view belowSubview:spinner]
将视图置于微调器下方。您可能还希望将微调器上的hidesWhenStopped
属性设置为YES
,以便在停止时自动隐藏它。
要记住的另一件事是加载和切换视图实际上可能不会花费那么长时间,因此如果事情发生得太快,可能不会出现微调器。