按下button上传下一个视图或web视图时,如何显示活动指标?

我的第一个看法是这样的 当我点击button,哪个标题是点击这里放大然后我想显示活动指标在第一个视图,并删除时,加载此视图。 在图像视图中从图像上传URL的第二个视图。

但我回去那么它显示活动指标,这是显示在这个视图。 第一个视图与活动指标

在第一个vie .m文件我已经使用这个代码的行动。

-(IBAction)btnSelected:(id)sender{ UIButton *button = (UIButton *)sender; int whichButton = button.tag; NSLog(@"Current TAG: %i", whichButton); UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; [spinner setCenter:CGPointMake(160,124)]; [self.view addSubview:spinner]; [spinner startAnimating]; if(whichButton==1) { [spinner stopAnimating]; first=[[FirstImage alloc]init]; [self.navigationController pushViewController:first animated:YES]; [spinner hidesWhenStopped ]; }} 

在上面的代码中,我有button动作,我在其中调用下一个视图。 现在我想显示/显示活动指标,当查看上传。 在接下来的视图中,我有一个图像视图,其中我上传的图像我已经声明一个活动指标,也不工作。 那怎么办?

托罗的build议提供了一个很好的解释和解决scheme,但我只是想提供另一种方法来实现这一点,因为这是我的做法。

正如托罗所说,

 - (void) someFunction { [activityIndicator startAnimation]; // do computations .... [activityIndicator stopAnimation]; } 

上面的代码将不起作用,因为当您在当前运行的函数中包含activityIndi​​cator时,您不给UI更新时间。 所以我和其他人做的是把它分解成一个单独的线程,如下所示:

 - (void) yourMainFunction { activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; [NSThread detachNewThreadSelector:@selector(threadStartAnimating) toTarget:self withObject:nil]; //Your computations [activityIndicator stopAnimating]; } - (void) threadStartAnimating { [activityIndicator startAnimating]; } 

祝你好运! -Karoly

创build一个webview。 添加一个活动指标到web视图。 如果你通过url加载一个图像到webview然后实现webview委托方法。 一旦URL被加载,然后停止活动指示器。

让我知道你无法执行哪一步。

 [self.navigationController pushViewController:first animated:YES]; 

一般来说,当你把一个视图控制器导入导航控制器时,它会调用 – (void)viewWillAppear:和 – (void)viewDidAppear:方法。 您可以在viewWillAppear中添加活动指示器视图,并调用指示器视图的startAnimation。 您不能在同一个运行循环下调用startAnimationstopAnimation 。 例如,

 - (void)viewWillAppear:(BOOL)animated { [aIndicatorView startAnimation]; // do somethings .... [aIndicatorView stopAnimation]; } 

因为startAnimationstopAnimation在同一个运行循环下,所以不会显示animation。

但是,如果你在 – (void)viewWillAppear:中调用stopAnimation ,并在另一个消息中调用stopAnimation ,如下所示。

 - (void)viewWillAppear:(BOOL)animated { [aIndicatorView startAnimation]; // do somethings... } - (void)viewDidAppear:(BOOL)animated { [aIndicatorView stopAnimation]; } 

由于viewWillAppear:和viewDidAppear:被不同的运行循环调用,所以活动指示器视图将工作正常。

或者,你可以做如下的事情:

 - (void)viewWillAppear:(BOOL)animated { [aIndicatorView startAnimation]; [[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]]; // do somethings .... [aIndicatorView stopAnimation]; } 

上面的例子是一个不好的例子,因为它在-runUntilDate:中调用两个或多个animation。 但它会让活动指标视图起作用。