UIActivityIndi​​cator 不会在 iOS 内停止

UIActivityIndicator doesn't stop in iOS

我在下载过程中显示微调器 (UIActivityIndi​​cator)。它在下载开始时显示微调器,但在下载完成后不会停止显示。我看到了一些关于同一问题的问题,但没有帮助。我需要让它在 ios7 和 iOS8 中工作。

我正在使用以下代码...

      - (void) startSpinner:(NSString *)message  {

    container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    container.center = self.view.center;
    container.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:0.4];
    container.layer.cornerRadius = 10;
    container.layer.masksToBounds = true;
    container.tag = 134;
    activityLabel = [[UILabel alloc] init];
    activityLabel.frame = CGRectMake(0, 70, 100, 30);
    activityLabel.text = message;
    activityLabel.textColor = [UIColor darkGrayColor];
    activityLabel.textAlignment = NSTextAlignmentCenter;
    activityLabel.font = [UIFont boldSystemFontOfSize:10];
    [container addSubview:activityLabel];


    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    activityIndicator.center = CGPointMake(container.frame.size.width/2, container.frame.size.height/2);
    [container addSubview:activityIndicator];

    [self.view addSubview:container];

    [activityIndicator startAnimating];
}

-(void)stopSpinner{
    [activityIndicator stopAnimating];
    container = [self.view viewWithTag:134];
    [container removeFromSuperview];
    activityIndicator = nil;
    NSLog(@"activity indicator should be removed %@",activityIndicator);
}

还有一个问题是设备屏幕中央没有显示微调器。

任何帮助将不胜感激....

这里有一些错误。

container.center = self.view.center;

如果您试图使容器在 self.view 中居中,则此方法无法实现。 self.view.center 是视图 frame 的中心,但您需要使用视图 bounds 的中心。这是更正后的代码:

container.center = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds));

您还需要更改设置 activity 指标框架的方式:

activityIndicator.center = CGPointMake(CGRectGetMidX(container.bounds), CGRectGetMidY(container.bounds));

此外,如果您多次调用 startSpinner,则可以将多个微调器添加到视图中,这可能是微调器似乎没有停止的原因。我建议您只分配和初始化一个微调器,并在 class 构造函数中执行。您可以对容器和 activityLabel 对象执行相同的操作。或者,您可以在 startSpinner 的顶部调用 stopSpinner(并在 stopSpinner 中添加一些空检查以避免引用空指针)。

根据您的代码无法确定为什么微调器似乎没有停止,但我的猜测是您连续多次调用 startSpinner,而没有任何对 stopSpinner 的干预调用。

如果您只调用 stopSpinner 一次,请验证您是否在主线程中这样做。

您可以在导航控制器上添加微调器视图,这样它就会根据需要查看中心。我想这会解决你的问题。

[self.navigationController.view addSubview:coverView];

别忘了将其从 self.navigationController.view

中删除