2012-09-10 51 views
2

我應該循環,直到PDF文件被加載UIActivityIndi​​cator消失。的Xcode - UIActivityIndi​​cator太快

我不明白爲什麼,但PDF加載之前指示消失。 我不明白,如果PDF文件過大(1,4 MB),如果我的應用程序凍結,或者,如果我寫的東西錯了代碼

-(void)startTheProcess { 

    act = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    //coordinate act 
    [act setCenter:CGPointMake(320/2, 440/2)]; 
    self.act.hidden = FALSE; 
    [self.view addSubview:act]; 
    [act startAnimating]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = TRUE; 
    [NSThread detachNewThreadSelector:@selector(creaVista) toTarget:self withObject:nil]; 
} 

- (void) creaVista{ 

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    NSURL *url = [NSURL URLWithString:@"http://www.something.com/file.pdf"]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [pdfView loadRequest:request]; 
    [pdfView setScalesPageToFit:YES]; 
    [self performSelectorOnMainThread:@selector(processDone) withObject:nil waitUntilDone:NO]; 
    [pool release]; 
} 
-(void)processDone { 

    [act stopAnimating]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = FALSE; 
} 

如果我調試它,我可以很容易地看到調試器快速轉到[act stopAnimating],然後停止,但該文件尚未加載:幾秒鐘後出現PDF。

你有什麼提示嗎?我是小白,我覺得我做了一些愚蠢的錯誤...... 感謝

+3

我只是猜測這裏,但也許'[pdfView的loadRequest:請求]'是一個異步操作,因此它立即返回並調用'[act stopAnimating]'。另外,你也試圖在'createVista:'中停止動畫,並在最後調用'processDone:'。 – Joshua

+0

對不起,複製錯誤。 in creaVista我不停止行爲... – Miwi

+0

您的pdfView是否位於視圖層次結構中的活動指示符之上? – gdavis

回答

5

這聽起來像約書亞在評論正確的想法。負載是異步的,並且會在負載實際完成之前返回。

如果您的pdfView是一個UIWebView,您可以使用UIWebViewDelegate方法webViewDidFinishLoad:來了解PDF何時完成加載。如果你將[act stopAnimating]放在那裏,它應該可以工作。

您也想將其放置在櫃面webView:didFailLoadWithError:有任何錯誤。

設置在pdfView委託做到這一點:[pdfView setDelegate:self]; 並確保你有你的控制器採用UIWebViewDelegate這樣的:
@interface ClassName : ItsSuperclass <UIWebViewDelegate>

+0

太棒了!它完美地工作,並且UIActivityIndi​​cator在PDF指示符顯示之前就消失了! – Miwi

相關問題