2012-02-21 98 views
2

UIButton被觸發,一個UIActivityIndicator開始,然後當implementLogin結束停止:UIActivityIndi​​catorView反應遲鈍

-(IBAction)loginButton { 
    NSLog(@"loginButton triggered"); 

    // Checks the Fields are not empty 
    if ([sessionIdField.text length] != 0 && [usernameField.text length] != 0) { 
     NSLog(@"Beginning Spinner"); 
     // Displays spinner 
     [activitySpinner startAnimating]; 

     [self implementLogin]; 

     // Displays spinner 
     [activitySpinner stopAnimating]; 
    } 
} 

但是在運行時,微調不會出現!我已經設置了微調器'停止時隱藏'。

當我設置活動指示器在視圖加載之前設置爲動畫時,它看起來應該是這樣,所以我猜測它與UIButton有問題...(另外,我正在使用'Touch Up Inside' )

這是一個簡單的問題......任何人都可以幫忙嗎?

感謝

+0

'implementsLogin'是否同步? – Costique 2012-02-21 20:19:56

+0

是的工具登錄是同步的。 – 2012-02-21 21:37:01

回答

2

無論implementLogin做(做一個網絡請求,也許?),它做它的主線程,這可能阻止像飛旋動畫UI更新上。

你可以重新編寫類似這樣:[代碼是未經測試,但你的想法]

[activitySpinner startAnimating]; 
dispatch_async(dispatch_get_global_queue(DISPATCH_PRIORITY_DEFAULT, 0), ^{ 
    [self implementLogin]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     // Stops spinner 
     [activitySpinner stopAnimating]; 
    } 
} 

這裏發生的事情是,你是派遣登陸任務的背景下,這個塊最後要做的就是停止主線程上的微調(作爲一個單獨的任務)。

+0

玩過一些multiThread方法後,我解決了這個問題: '[NSThread detachNewThreadSelector:@selector(changeSpinner :) toTarget:self withObject:@「TRUE」];'謝謝! – 2012-02-27 13:07:39

0

沒有更多的代碼,我們只能猜測爲什麼它不工作的原因。

我認爲正確的「開始微調」輸出(?)

如果是這樣,你可能沒有正確初始化UIActivityIndicatorView。 它看起來像這樣嗎?

activitySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
activitySpinner.hidesWhenStopped = YES; 
[view addSubview:activitySpinner]; 
+0

我已經使用了界面生成器(我相信)爲我初始化UIActivityIndi​​catorView。是的,它隱藏了,而且它已經隱藏了。實現LoginLog處理一些API調用,然後返回。 – 2012-02-21 21:38:58

+0

你檢查'隱藏'嗎?那麼這是至關重要的一點。如果「隱藏」屬性設置爲「是」(TRUE),即使啓動了動畫,它也不會顯示。 – fscheidl 2012-02-21 21:53:06