我正在尝试从我的App Delegate管理活动指示器,这样我的任何视图都可以启动指示器。所以,我将它作为子视图添加到'window'并按如下方式启动/停止:
- (void)didStartActivity
{
if( activityIndicator == nil ) {
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
activityIndicator.hidesWhenStopped = YES;
activityIndicator.center = window.center;
activityIndicator.transform = CGAffineTransformScale(CGAffineTransformIdentity, 6.0, 6.0);
}
NSLog(@"%s: starting the activityIndicator", __FUNCTION__);
[window addSubview:activityIndicator];
[activityIndicator startAnimating];
}
我看到了日志消息,所以我知道正在调用代码。指标位于中心,默认大小为6倍。但是,stopAnimating并没有停止。我唯一可以得出的结论是它需要在当前的视图控制器中运行。
- (void)didStopActivity
{
NSLog(@"%s: stopping the activityIndicator", __FUNCTION__);
[activityIndicator stopAnimating];
[activityIndicator removeFromSuperview];
}
答案 0 :(得分:8)
您是否尝试从后台线程执行此操作?一个简单而明确的测试是添加:
NSLog(@"thread: %@", [NSThread currentThread]);
答案 1 :(得分:0)
检查activityIndicator
是否不是nil
:
NSLog(@"activityIndicator: %@", activityIndicator);
答案 2 :(得分:0)
行。我做了我的实验,果然,当我将活动指示器添加为viewcontroller视图的子视图时,它完美无缺。但是,当我使用新的simpleton项目将其作为窗口的子视图时,它也起作用。显然我的代码中存在一个错误,需要更多检查。
我将给予Eimantas两个答案,因为调试概念在我的解决方案中很有用。
答案 3 :(得分:0)
如果您的日志为零,请执行以下操作:
“.h”中的声明:
__strong UIActivityIndicatorView *activityIndicator
__strong避免ARC,然后你可以删除并停止activityIndicator。
[activityIndicator stopAnimating];
[activityIndicator removeFromSuperview];
答案 4 :(得分:0)
如果您将它多次添加到超级视图中,它将无效。
尝试放
[superView addSubview:activityIndicator];
进入
if( activityIndicator == nil ) {
条件