3

我正在尝试从我的 App Delegate 管理活动指示器,这样我的任何视图都可以放置指示器。因此,我将其作为子视图添加到“窗口”并按如下方式启动/停止:

- (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];
}
4

5 回答 5

8

您是否尝试从后台线程执行此操作?一个简单而明确的测试是添加:

NSLog(@"thread: %@", [NSThread currentThread]);
于 2010-12-12T22:39:42.087 回答
0

检查你activityIndicator是否不是nil

NSLog(@"activityIndicator: %@", activityIndicator);
于 2010-01-30T18:51:07.477 回答
0

如果您的日志为零,请执行以下操作:

在“.h”中声明:

__strong UIActivityIndicatorView *activityIndicator

__strong 避免 ARC,然后您可以删除并停止 activityIndi​​cator。

[activityIndicator stopAnimating];
[activityIndicator removeFromSuperview];
于 2013-03-13T13:50:50.610 回答
0

好的。我做了我的实验,果然,当我将活动指示器添加为视图控制器视图的子视图时,它完美地工作。但是,当我随后使用那个新的 simpleton 项目尝试将其作为窗口的子视图时,它也可以工作。显然我的代码中有一个错误,需要更多检查。

我将奖励两个 Eimantas 答案,因为调试概念对我的解决方案很有帮助。

于 2010-01-31T00:31:59.453 回答
0

如果您不止一次将它添加到超级视图中,它将不起作用。

试着放

[superView addSubview:activityIndicator];

进入

if( activityIndicator == nil ) {

(健康)状况

于 2016-03-24T16:10:14.800 回答