0

在我的应用程序委托中的 (void)applicationDidFinishLaunching:(UIApplication *)application 方法中,我有以下代码来显示活动指示器:

spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.alpha = 1.0;
spinner.center = self.window.center;
spinner.layer.shadowColor = [UIColor grayColor].CGColor;
spinner.layer.shadowRadius = 1;
spinner.layer.shadowOpacity = 0.5;
spinner.layer.shadowOffset = CGSizeMake(0, 1);
[self.window addSubview:spinner];

上面的代码在 iOS 5 及更早版本中运行良好。但是,活动指示器在 iOS 6 中不显示。如何修改上述代码,以便在 iOS 6 中也显示活动指示器?

谢谢!

4

4 回答 4

0

尝试将最后两行添加到您的代码中:

spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.alpha = 1.0;
spinner.center = self.window.center;
spinner.layer.shadowColor = [UIColor grayColor].CGColor;
spinner.layer.shadowRadius = 1;
spinner.layer.shadowOpacity = 0.5;
spinner.layer.shadowOffset = CGSizeMake(0, 1);
[self.window addSubview:spinner];


[spinner setHidden:YES];
[spinner startAnimating];
于 2012-11-16T14:32:46.203 回答
0

applicationDidFinishLaunching:withOptions:请记住,在方法返回之前,UI 中不会显示任何视图。您不能设置 aUIActivityIndicatorView并期望它立即显示。在当前运行循环完成之前,iOS 不会更新 UI。从表面上看,您Default.png正在执行期间显示,applicationDidFinishLaunching:withOptions:并且在该方法完成之前您rootViewController不会接管 UI。

UIActivityIndicatorView如果您希望向Default.png用户显示应用程序正在启动,那么您可以执行以下操作:

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default.png"]];
spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.frame = CGRectMake(0.0, 0.0, 60.0, 60.0);
spinner.center = CGPointMake(imageView.center.x, imageView.center.y);

spinner.alpha = 1.0;
spinner.layer.shadowColor = [UIColor grayColor].CGColor;
spinner.layer.shadowRadius = 1;
spinner.layer.shadowOpacity = 0.5;
spinner.layer.shadowOffset = CGSizeMake(0, 1);
[spinner startAnimating];
[imageView addSubview:spinner];
[self.window addSubview:imageView];
[self.window makeKeyAndVisible];    

dispatch_async(dispatch_get_main_queue(), ^{
    // The rest of your method here
    // Be sure to remove the UIImageView from the window when the processing is complete.
}); 

这样,applicationDidFinishLaunching:withOptions:将控制权返回给 iOS 并显示视图。一旦你加载了你的rootViewController,你可以imageView从窗口中删除 。

UIActivityIndicatorView此外,将直接添加到 不是一个好主意UIWindow,而是应该将其添加到已经是窗口的子视图的预先存在的视图中,就像我上面演示的那样。

我希望这有帮助。

于 2012-11-16T19:45:52.143 回答
0

添加以下行:

[spinner performSelector:@selector(startAnimating) withObject:nil afterDelay:0.0f];
于 2012-11-16T21:06:48.590 回答
0

UIActivityIndicatorView我在使用a时遇到了类似的问题UITableViewCell。问题是调用startAnimating单元创建方法不起作用。

为了解决这个问题,我在startAnimating方法中调用了cellForRowAtIndexPath方法。

这可能与调用相同startAnimatingapplicationDidFinishLaunching您需要在实际显示窗口时调用它。计时器可以工作,甚至更好,创建一个UIViewController并将微调器放在该视图中。

于 2013-05-14T07:57:49.953 回答