在我的UIViewController的loadView方法中,我啓動了一個UIActivityIndicator。後來在loadView中我加載了一個複雜的UIView,大約需要2-3秒才能加載。 (更具體地說,有很多圖片的UIScrollView)。我的問題是UIActivityIndicator微調僅在我的其他圖層加載後纔可見。 (這對我來說當然沒用)。什麼是處理這個問題的正確方法?顯示UIActivityIndicatorView直到加載UIView
- (void)loadView {
CGRect fullScreenRect=[[UIScreen mainScreen] bounds];
UIView *contentView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 340, fullScreenRect.size.width)]autorelease];
self.view = contentView;
spinner = [[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite] autorelease];
spinner.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
spinner.center = self.view.center;
[self.view addSubview:spinner];
[spinner startAnimating];
scrollView=[[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 340, fullScreenRect.size.width)]autorelease];
...setting up scrollView...
[self.view addSubview:scrollView];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[spinner removeFromSuperview];
}
我發現了一個有點類似於螺紋: UIActivityIndicatorView not showing until after loading done
但它表明加載在後臺線程的東西,但加載和顯示一個UIView只能在主線程中,據我所知。
我是初學者,抱歉,如果我的問題根本錯誤。
幾個選項我看 - 你可以渲染視圖屏幕外的圖像在後臺線程並在完成後,該視圖的圖像添加到您的滾動視圖,或者你可以實現滾動視圖平鋪並按需加載滾動視圖內容。運行的儀器可能還有其他的優化。如果您需要更多幫助瞭解這些選項,請告訴我。 –
爲什麼使用loadView而不使用筆尖?你是一名初學者,但正在嘗試使用先進的技術,並努力做出你需要努力的事情。所以用一個有觀點的筆尖。當你得到viewDidLoad,然後將微調器添加到你的視圖。提供關閉微調器並更新視圖的方法。在viewDidLoad中,使用默認隊列上的dispatch_async()來完成背景繁重的工作。當它完成後,讓它通過dispatch_async發送另一條消息(dispatch_get_main_queue()告訴你的viewController工作已經完成,這需要幾天的時間才能完成。 –