2012-04-03 168 views
5

我有這個問題,我將UIActivityIndicatorView添加到UIScrollView;一切工作正常,除非UIScrollView滾動,否則它不會開始旋轉。UIActivityIndi​​catorView不旋轉

任何人都可以幫助我解決這個問題嗎?

謝謝。

這裏是一些代碼:

UIActivityIndicatorView *loaderActivity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    loaderActivity.center = CGPointMake(87/2,y+56/2); 
    loaderActivity.tag=tag; 
    [mainScrollView addSubview:loaderActivity]; 
    [loaderActivity startAnimating]; 
    [loaderActivity release]; 
+0

請問您可以在此處添加代碼以獲得更多關於問題的許可。 – 2012-04-03 10:50:22

+0

還有一件事要開始活動運行,您需要在活動添加到視圖中或任何事件(如按鈕單擊或僅稍微延遲設置執行選擇器)之後調用方法。 – 2012-04-03 10:52:05

+0

你在主線程中執行另一個任務嗎?如果是這樣,主線程將用於該任務,並將停止動畫,直到該任務完成。 – 2012-04-03 10:52:21

回答

6

你需要調用startAnimating對活動的指標有它的動畫。或者在界面生成器中,您可以勾選「動畫」複選框。

+0

爲什麼這個答案不被接受? – Omeed 2016-09-23 15:02:07

+0

一個更好的問題是,什麼是非動畫活動指示器,爲什麼會是默認狀態? – devios1 2017-02-27 21:43:10

0

嘗試在不同的線程中運行動畫。

NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(showProgress) object:nil]; 
[thread start]; 

//do whatever your want here 

//call this when you want it stop animating 
    [activityIndicator stopAnimating]; 
    [thread release]; 


- (void)showProgress{ 

    [activityIndicator startAnimating]; 

} 
+0

我不認爲這是一個線程問題。不過謝謝你 – astazed 2012-04-03 11:48:35

2
activityIndicator = [[UIActivityIndicatorView alloc] 
initWithFrame:CGRectMake(87/2,y+56/2); 
[activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite]; 
activityIndicator.tag=tag; 
[mainScrollView addSubview:loaderActivity]; 
[activityIndicator startAnimating]; 
[activityIndicator release]; 
3

,它不是動畫,直到您在滾動視圖滾動的事實是,你要startAnimating電話在後臺線程正在發生的症狀。 UIKit調用應該在主線程中進行。

您可以驗證它在後臺線程中加入代碼是這樣發生的:

if ([NSThread isMainThread]) { 
    NSLog(@"Running on main thread."); 
} else { 
    NSLog(@"Running on background thread."); 
} 

你要確保你在你的問題顯示在主線程上運行的代碼。要做到這一點,你可以改變你的代碼看起來是這樣的:

// this code would be wherever your existing code was 
[self performSelectorOnMainThread:@selector(addActivityIndicatorToView:) withObject:mainScrollView waitUntilDone:YES]; 

// this would be a new method in the same class that your existing code is in 
- (void) addActivityIndicatorToView:(UIView*) view { 
    UIActivityIndicatorView *loaderActivity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    loaderActivity.center = CGPointMake(87/2,y+56/2); 
    loaderActivity.tag=tag; 
    [view addSubview:loaderActivity]; 
    [loaderActivity startAnimating]; 
    [loaderActivity release]; 
} 
0

當初,我在viewDidLoad作出startAnimating呼叫,沒有工作的問題。我將電話轉移到viewWillAppear,它工作!

相關問題