我有一個視圖控制器,它繼承了第二個視圖控制器,該視圖控制器加載了多個圖像,但在從第一個VC到第二個圖像之前,它會掛起一兩秒鐘。我試圖添加一個UIActivityIndicatorView,以便用戶不認爲該應用程序被凍結(這是目前的感覺)。然而,我似乎無法讓它正常工作,並且我看到的所有示例都使用Web視圖或正從服務器訪問某種數據,而我正在加載存儲在應用程序中的圖像。在切換視圖控制器時顯示UIActivityIndicatorView
我下面有一些代碼來顯示我所嘗試的。
.h文件中
@interface SecondViewController: UIViewController
@property (strong, nonatomic) UIActivityIndicatorView *indicator;
.m文件
-(void)viewWillAppear:(BOOL)animated
{
self.indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
self.indicator.center = CGPointMake(160, 240);
[self.view addSubview:self.indicator];
//Loading a lot of images in a for loop.
//The images are attached to buttons which the user can press to bring up
//an exploded view in a different controller with additional information
[self.indicator startAnimating];
for{....}
[self.indicator stopAnimating];
}
我曾嘗試使用也將dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
呼籲[self.indicator startAnimating]
,但所發生的一切是視圖控制器即刻加載和圖片後,立即/按鈕從不加載。
當用戶單擊第一個視圖控制器上的「下一個」按鈕時,如何擺脫延遲?應用程序掛在第一個VC大約一兩秒鐘,然後最後加載第二個視圖控制器與所有的圖像/按鈕。我是否需要將UIActivityIndicatorView
添加到第一個視圖控制器,或者我是否完全錯誤地進行了這種操作?我願意接受任何和所有的方法來完成這件事,事先要感謝。
這種方式將掛起主線程,而用戶界面將是不負責任的。您應該在後臺線程中加載UI並派發到主線程來更新UI。 – sahara108
用戶界面將被阻止,直到「for {...}」部分完成,但活動指示器將正確地進行動畫。實現實際上取決於設計:您是否希望用戶能夠在「for {...}」初始化完成之前與UI進行交互。如果在後臺線程中調用loadUI並分派給主線程,則用戶將能夠在「for {...}」完成之前與UI進行交互,這可能不是作者想要的。 – subchap
在圖像/按鈕加載之前,用戶不需要與應用程序進行任何交互。我希望應用程序顯示指示器,直到圖像全部加載。 – DevilsDime