2014-10-26 48 views
0

我有一個檢查藍牙設備([service scanForSensBoxes])的方法。 scanForSensBoxes方法的超時時間爲5秒。在此期間,我想製作一個活動指標。 那裏,我開始在附加的方法開始旋轉,並在「scanForSensBoxes」調用後停止它。顯然這不起作用。我現在的代碼的結果是,只有在「buttonScanPressed」方法完成時,而不是在處理它時,纔會處理微調器的啓動和停止動畫。意味着微調從未做動畫。Objectiv-C:在方法調用期間的活動指示器

我該如何改變方法,以便在「buttonScanPressed」調用過程中微調器動畫?

感謝您的任何幫助。

- (IBAction)buttonScanPressed:(id)sender { 
    [_waitingSpinner startAnimating]; 
    SensBoxServiceLib *service = [[SensBoxServiceLib alloc]init]; 
    NSString *tmp=[NSString stringWithFormat:@"%d",[service scanForSensBoxes]]; 
    [_waitingSpinner stopAnimating]; 
    _sensBoxCount.text=tmp; 
} 
+1

你爲什麼要評論[_waitingSpinner stopAnimating]? – hariszaman 2014-10-26 20:51:16

+0

@hariszaman對不起我的錯誤。我現在糾正了這個帖子,因爲這不是問題的原因。 – 2014-10-26 20:59:50

回答

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]; 
     }); 
    }); 
} 
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; 
} 
+0

我剛纔發現了這個問題。 scanForSensBoxes中有一個睡眠。這當然會阻止整個線程,所以不會旋轉...... – 2014-10-26 21:19:07