Objective-C:方法调用期间的活动指示符

时间:2014-10-26 20:46:59

标签: objective-c uiactivityindicatorview

我有一种检查蓝牙设备的方法([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;
}

2 个答案:

答案 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;
}