2010-12-01 19 views
0

我正在做一個請求下載一些圖像,然後我想用它們替換子視圖。 這意味着用戶界面被阻止,然後稍後顯示新的視圖。iOS4 networkActivityIndi​​catorVisible通過用戶界面屏蔽

我希望用戶瞭解由於下載而發生阻塞。

首先,我試圖用

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
[self downloadFunction]; 
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

這導致最大信號的活動指示燈的閃爍(主要是什麼),因爲我的請求被阻塞UI線程。

我不能把downloadFunction放到後臺,因爲我在下推控制器之前依賴於下載的數據可用(會導致錯誤「不止一次推送同一視圖控制器實例」,因爲我可以多次點擊按鈕)。

然後我試圖把一個子視圖用紡車上的觀點之上:

[self performSelectorInBackground:@selector(showActivitySubView) withObject:nil]; 
or 
[NSThread detachNewThreadSelector: @selector(showActivitySubView) toTarget:self withObject:nil]; 

但仍UI被阻塞,下載完成後,只是顯示我的指示......

有什麼建議嗎?

回答

1

您可以簡單地將您的方法拆分爲兩部分,並在阻塞主線程之前使用定時調用來允許UI刷新線程啓動。例如:

- (void) doActualWork { 
    [self downloadFunction]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
} 

- (void) doWork { 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    [self performSelector:@selector(doActualWork) withObject:Nil afterDelay:0.05]; 
} 

有可能是一個這樣做的更好的方法,我不知道該任務欄上的小指標是足夠的活動指示,以保持應用程序審查的鄉親高興,但這應該工作並且不需要線程。

+0

謝謝!這對我來說很有效......爲了指示網絡活動,我添加了另一個UIActivityIndi​​catorView的子視圖,該視圖也將在doActualWork開始之前運行,並且下載將阻止UI,因此我不必關心推動按鈕兩次:-) – 2010-12-01 21:24:38