2010-12-19 37 views
2

我試圖在從我的應用程序中解析互聯網數據時將旋轉活動指示器(UIActivityIndi​​catorView)添加到我的應用程序中。我有一個IBOutlet(微調)連接到IB的UIActivityIndi​​catorView。最初,我把它設置爲這樣:活動指示器不旋轉

- 

(void) function { 
     self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhite]; 
self.spinner.hidesWhenStopped = YES; 
[spinner startAnimating]; 
//parse data from internet 
[spinner stopAnimating];} 

但微調不會旋轉。我讀到它與同一線程中的所有內容有關。所以我試過這個:

- (void) newFunction { 
     self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhite]; 
self.spinner.hidesWhenStopped = YES; 
[spinner startAnimating]; 
[NSThread detachNewThreadSelector: @selector(function) toTarget: self withObject: nil]; 
[spinner stopAnimating];} 

但是還是沒有運氣。有任何想法嗎?謝謝。

回答

8

newFunction:方法應該是這樣的:

- (void) newFunction { 
    self.spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
    self.spinner.hidesWhenStopped = YES; 
    [NSThread detachNewThreadSelector: @selector(function) toTarget: self withObject: nil]; 
} 

和你function方法應該是這樣的:

- (void) function { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    [self.spinner performSelectorOnMainThread:@selector(startAnimating) withObject:nil waitUntilDone:NO]; 

    //... 

    [self.spinner performSelectorOnMainThread:@selector(stopAnimating) withObject:nil waitUntilDone:NO]; 
    [pool drain]; 
} 
+1

+1爲正確答案,附錄中說明他沒有看到任何內容的原因是因爲他在主線程啓動後立即停止動畫。他必須執行「performSelectorOnMainThread:withObject:waitUntilDone:」的原因是因爲所有UI相關的活動都發生在主線程上,但是微調器的啓動/停止必須發生在另一個線程內。 – jer 2010-12-19 04:05:52

0

你不應該再intitialize指標,請您及時與本替換你的代碼。

-(void) function { 
    [spinner startAnimating]; 
    [self performSelector:@selector(newfunction) withObject:nil afterDelay:3.0]; 
} 
- (void) newfunction { 
    [spinner stopAnimating]; 
} 

謝謝。

0

只看到「//從互聯網解析數據」是同步還是異步。異步意味着一個單獨的線程將從該點開始,並且當前函數的執行將會毫不拖延地繼續。

在第二個示例中,您明確地創建了單獨的線程,這意味着@selector(function)將在單獨的線程上發生,並且立即執行下一個語句[spinner stopAnimating]。所以,Spinner似乎並沒有在旋轉。

此外,請確保您僅在主線程上啓動和停止活動指示符。