2012-05-27 49 views
1

我有一個執行功能的iPhone界面上的按鈕。該功能是這樣的:UIActivityView不動畫

-(IBAction)courses:(id)sender { 
[loading startAnimating]; 
[connection getCourses]; 
[outlet setText:connection.lastResponseData]; 
} 

我的問題是,動畫只有[outlet setText:connection.lastResponseData後開始。我怎樣才能讓裝載在此之前開始動畫?

謝謝。

+0

如果您使用CA來處理動畫,那麼它不應該阻塞主線程,這可能是您在做什麼...... – CodaFi

回答

2

看起來好像getCourses正在阻塞主線程;您開始的任何動畫將被刪除,直到courses:返回。修改代碼以使用一個後臺線程:

-(IBAction)courses:(id)sender { 
[loading startAnimating]; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     [connection getCourses]; 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [outlet setText:connection.lastResponseData];  
      [loading stopAnimating]; 
     }); 
    }); 
} 

這將會把在系統提供的背景GCD隊列,它包裝一個後臺線程阻塞的網絡訪問。

+0

除了那個讓我們回想起我們老朋友的好哥們以外,這真是超級酷:)請問能否引導我一點,從動畫被刪除的地方更好地理解? –

+0

如何在[outlet setText]部分之後停止動畫? – CoreCode

+0

只需調用'stopAnimating'即可停止動畫;我會修改我的答案。 –

0

似乎你的連接阻塞了主線程,這也是UI的責任。嘗試與UI進行交互,而connection已啓動但未完成(如果未響應) - 使連接在另一個線程中運行。


例如,異步NSURLConnection不會阻止你的UI。

+0

我無法在連接正在處理時使用UI。我將如何把連接放在另一個線程上? – CoreCode

+0

查看答案更新。 –

+0

好的。我仍然不太確定如何將它放在另一個線程上 – CoreCode