1

我想在按钮操作上启动繁忙指示器,我在 IB 操作中使用以下代码:

 busyIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
 busyIndicator.center = self.view.center;
 [busyIndicator setColor:[UIColor redColor]];
 [self.btnInjuryPrevention addSubview:busyIndicator];
 [self.view addSubview:busyIndicator]; // spinner is not visible until started

[busyIndicator startAnimating];
if(![AppStatus isAppOnline]) {
    noInternetViewController = [[NoInternetViewController alloc] initWithNibName:@"NoInternetViewController" bundle:[NSBundle mainBundle]];
    noInternetViewController.view.tag = CHILD_CONTROLLER_TAG;
    [self.navigationController pushViewController:noInternetViewController animated:YES];
    NSLog(@"Yoy are offline..>!!");
}
else
{
    mInjuryPreventionViewController=[[InjuryPreventionViewController alloc] initWithNibName:@"InjuryPreventionViewController" bundle:nil withHeader:@" Injury Prevention" withId:INJURY_PREVENTION_ID];
    mInjuryPreventionViewController.view.tag = CHILD_CONTROLLER_TAG;
    [self.navigationController pushViewController:mInjuryPreventionViewController animated:YES];
    //[mInjuryPreventionViewController release];
}
// [self removeLoadingView];
[busyIndicator stopAnimating];

我使用上面的代码,但是繁忙的指示器不会启动,所以你能告诉我这可能吗?

4

3 回答 3

4

如果您在单个块中启动和停止动画,您将看不到任何内容。您可以认为该startAnimating方法的意思是“当控制权返回操作系统时开始制作动画”。

目前尚不清楚为什么你需要一个微调器。创建视图控制器需要很长时间吗?不过,如果您将视图控制器的内容移动到新方法中,您可以执行以下操作:

...
// create busy indicator
[busyIndicator startAnimating];
[self performSelector:@selector(createViewController) withObject:nil afterDelay:0]; 

...

// at the end of the createViewController method...
[busyIndicator stopAnimating];
于 2012-07-25T10:53:17.493 回答
1

正如我从你给定的代码中了解到的,首先你在一些 UIViewController 上,你在哪里添加你的 UIActivityIndi​​catorView,毕竟你做了两个条件 if-else 你初始化另外两个 UIViewController 所以在这个视图中(在 if-else 之后生成)你的 UIActivityIndi​​catorView将在您添加时显示为

    [self.view addSubview:busyIndicator]; // spinner is not visible until started

请用 if 语句定义你的函数执行。?

继续编码

于 2012-07-25T10:45:54.530 回答
0

由于您在单个方法中启动和停止 busuInde​​cator,无需任何长时间处理,因此这两个函数都在毫秒内执行,因此您无法在 UI 上看到 busyIndecator。在 UI 上显示 busyIndecator 或任何插座。我应该有一些人类可识别的时间跨度。像:

[busyIndicator startAnimating];
//Do EXTREME PROCESSING!!!
[busyIndicator stopAnimating];
于 2015-06-18T17:46:01.180 回答