UIActivityIndicator 不会在 iOS 内停止
UIActivityIndicator doesn't stop in iOS
我在下载过程中显示微调器 (UIActivityIndicator)。它在下载开始时显示微调器,但在下载完成后不会停止显示。我看到了一些关于同一问题的问题,但没有帮助。我需要让它在 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
中删除
我在下载过程中显示微调器 (UIActivityIndicator)。它在下载开始时显示微调器,但在下载完成后不会停止显示。我看到了一些关于同一问题的问题,但没有帮助。我需要让它在 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
中删除