我有一种检查蓝牙设备的方法([service scanForSensBoxes]) scanForSensBoxes方法的超时时间为5秒。在此期间,我想为活动指标制作动画。
我在附加方法的beginn开始旋转,并在调用“scanForSensBoxes”后停止它。
显然这不起作用。我现在的代码的结果是,只有当“buttonScanPressed”方法完成而不是在处理过程中时,才会处理微调器的开始和停止动画。意味着微调器永远不会动画。
我如何更改方法,因此在调用“buttonScanPressed”期间,微调器会动画?
感谢您的帮助。
- (IBAction)buttonScanPressed:(id)sender {
[_waitingSpinner startAnimating];
SensBoxServiceLib *service = [[SensBoxServiceLib alloc]init];
NSString *tmp=[NSString stringWithFormat:@"%d",[service scanForSensBoxes]];
[_waitingSpinner stopAnimating];
_sensBoxCount.text=tmp;
}
答案 0 :(得分:1)
如果scanForSensBoxes
阻止主线程,则活动指示符不会生成动画。假设在这种情况下,您需要在后台队列中执行该方法中的阻塞活动。
-(IBAction)buttonScanPressed:(id)sender {
// animate activity indicator
[_waitingSpinner startAnimating];
// perform blocking activity in background
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) {
SensBoxServiceLib *service = [[SensBoxServiceLib alloc] init];
NSString *tmp = [NSString stringWithFormat:@"%d", [service scanForSensBoxes]];
// perform UI updates on main thread
dispatch_async(dispatch_get_main_queue(), {
[_waitingSpinner stopAnimating];
});
});
}
答案 1 :(得分:0)
你需要隐藏它
- (IBAction)buttonScanPressed:(id)sender {
_waitingSpinner.hidden = NO;
[_waitingSpinner startAnimating];
SensBoxServiceLib *service = [[SensBoxServiceLib alloc]init];
NSString *tmp=[NSString stringWithFormat:@"%d",[service scanForSensBoxes]];
[_waitingSpinner stopAnimating];
_waitingSpinner.hidden = YES;
_sensBoxCount.text=tmp;
}