我有一個PhotoViewController
類與@property UIActivityIndicatorView* spinner
。 FlickrPhotoViewController
是PhotoViewController
的一個子類,用於從Flickr下載照片並告訴微調者何時開始和停止動畫。 「updatePhoto」叫每個視圖控制器被賦予了Flickr照片時間:UIActivityIndicatorView從不動畫
- (void)updatePhoto { // Download photo and set it
NSLog("updatePhoto called");
if (self.spinner) NSLog(@"Spinner exists in updatePhoto");
dispatch_queue_t downloadQueue = dispatch_queue_create("downloader",
NULL);
[self.spinner startAnimating];
dispatch_async(downloadQueue, ^{
// Download the photo
dispatch_async(dispatch_get_main_queue(), ^{
[self.spinner stopAnimating];
// Set the photo in the UI
}
});
});
}
上述方法正是我總是用在我的表視圖控制器顯示紡車,而表格內容下載,它在那裏工作。
你會注意到在updatePhoto
的開頭,如果UIActivityIndicatorView
存在,我會打印一條消息。我在awakeFromNib
,viewDidLoad
和viewWillAppear
中發表了類似聲明。當我運行它,這是準確的輸出我得到:
2013-01-31 21:30:55.211 FlickrExplorer[1878:c07] updatePhoto called
2013-01-31 21:30:55.222 FlickrExplorer[1878:c07] Spinner exists in viewDidLoad
2013-01-31 21:30:55.223 FlickrExplorer[1878:c07] Spinner exists in viewWillAppear
爲什麼spinner
不awakeFromNib
存在嗎? Docs指出:「當一個對象收到一個awakeFromNib消息時,它確保所有的出口和動作連接已經建立。」 IBOutlet可以在沒有連接到的對象的情況下連接嗎?在這種情況下,可以將spinner
IBOutlet連接到故事板而不分配spinner
?
超出此範圍,我將覆蓋spinner
的獲取方,以便它在不存在的情況下實例化。因此,打印輸出現在看起來像這樣:
2013-01-31 21:48:45.646 FlickrExplorer[2222:c07] Spinner exists in awakeFromNib
2013-01-31 21:48:45.647 FlickrExplorer[2222:c07] updatePhoto called
2013-01-31 21:48:45.647 FlickrExplorer[2222:c07] Spinner exists in updatePhoto
2013-01-31 21:48:45.649 FlickrExplorer[2222:c07] Spinner exists in viewDidLoad
2013-01-31 21:48:45.650 FlickrExplorer[2222:c07] Spinner exists in viewWillAppear
這是我本來預期會看到的。不過,我仍然沒有得到任何動畫。
,我已經排除了可能出現的問題:
- 的spinner is the same color as the background,使其不可見。在我的項目中,背景是黑色的,而微調框是白色的。
- 我正在嘗試動畫
UIActivityIndicatorView
while some expensive method is blocking the main thread。在我的項目中,我所有的文件系統I/O和下載方法都在非主要的dispatch_async
隊列中調用。 - 微調的IBOutlet is not hooked up。在我的項目中,我已經多次檢查了這麼多次。可以從故事板和PhotoViewController.h文件中看到它已連接。
所有這三種可能性的事實,把[self.spinner startAnimating];
在viewWillAppear
使得整個下載過程順利動畫排除。如果你喜歡,你可以下載this project。只需轉到任何嘗試顯示大圖片的屏幕,您都會看到微調不出現。這個項目有很多問題,但這是我現在關注的問題。
編輯1:
- 我添加上的Git項目的缺少相關性,因此該項目將 現在編譯您
編輯2(2013年2月2日):
- 由於另一個視圖控制器的
prepareForSegue
設置了updatePhoto
方法,因此我只在iPhone上看到此問題照片在FlickrPhotoViewController
。這是否有可能導致這個問題?
爲什麼不只是使用MBProgressHUD https://github.com/jdg/MBProgressHUD並讓自己擺脫所有那些'ActivityIndicator'的煩惱 –
我已經閱讀了這麼好的簡潔問題已經很長時間了的研究努力。 +1。接受我的建議:不要使用界面「蹩腳的」Builder來強調自己。代碼工作得很好。 – 2013-01-31 17:26:22
+1對問題的完整性。激勵我獲取您的代碼並瀏覽它。難以測試,因爲它遠不及編譯。我注意到了一些事情:你的視圖在IB中是白色的,而且你在問題中引用的代碼被setPhoto:setter調用,它由外部VC調用,它完全不清楚你的FlickrPhotoViewController是否正確在這個UI相關的東西開始發生之前初始化。 – danh