這似乎是一個非常簡單的問題,但我一直無法找到任何好的答案。如何在iPhone應用程序中導航時實現加載動畫?
我想要做的是在加載某個函數時製作某種動畫。在等待內容時,我已經在webapp中包含了一個動畫.gif文件,但在本地導航時我需要相同的功能。例如,當我按下標籤欄中的一個按鈕時,屏幕只是空白,直到整個頁面加載完畢。
它不需要任何花哨。我喜歡這種方式,例如在臭名昭着的「旋轉輪」的Facebook應用程序中解決。
在此先感謝!
這似乎是一個非常簡單的問題,但我一直無法找到任何好的答案。如何在iPhone應用程序中導航時實現加載動畫?
我想要做的是在加載某個函數時製作某種動畫。在等待內容時,我已經在webapp中包含了一個動畫.gif文件,但在本地導航時我需要相同的功能。例如,當我按下標籤欄中的一個按鈕時,屏幕只是空白,直到整個頁面加載完畢。
它不需要任何花哨。我喜歡這種方式,例如在臭名昭着的「旋轉輪」的Facebook應用程序中解決。
在此先感謝!
我想這取決於什麼被加載?你是否在等待服務器的響應?在這種情況下,我通常在我的視圖中放置了一個旋轉輪(UIActivityIndicatorView),該旋轉輪在未選中動畫複選框的情況下具有隱藏功能(還有一條消息可以通過程序設置)。然後,當從服務器接收到數據時,我只需在UIActivityIndicator視圖上調用stopAnimating,它就會隱藏起來。然後,您可以顯示您需要展示的任何內容。
您可以添加一個UIActivityIndicatorView
取其觀點是「裝」:
CGRect mainBounds = [[UIScreen mainScreen] bounds];
CGRect indicatorBounds = CGRectMake(mainBounds.size.width/2 - 12,
mainBounds.size.height/2 - 12, 24, 24);
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]
initWithFrame:indicatorBounds]];
indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
[indicator startAnimating];
[yourLoadingView addSubview:indicator];
我設法添加指標,但遺憾的是,當我應該這樣做時。我試圖做的是在從一個頁面移動到另一個頁面時(當製作一個新的ViewController並請求帶有NSURLRequest的新頁面時)使這個指示器出現。我試圖在webView.loading上測試,然後在這是真的時啓動動畫,但沒有任何反應。在加載新頁面之前,屏幕仍然是白色的(並且是的,我嘗試過使用背景顏色,因此它可見)... – 2009-07-16 14:06:16
可以作爲一個子視圖添加UIActivityIndicatorView到視圖,當動作結束時,你可以從上海華盈刪除...
UIActivityIndicatorView *av = [[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease];
av.frame=CGRectMake(145, 160, 25, 25);
av.tag = 1;
[yourView addSubview:av];
[av startAnimating];
取出
UIActivityIndicatorView *tmpimg = (UIActivityIndicatorView *)[yourView viewWithTag:1];
[tmpimg removeFromSuperview];
希望它可以幫助...
在審美筆記上,請注意UIActivityIndicatorView
附帶幾種內置樣式供您選擇。上面的代碼示例使用灰色和白色選項,但Apple的文檔中還有更多描述。您可以通過設置樣式:
-initWithActivityIndicatorStyle:(UIActivityIndicatorViewStyle)
或通過設置對象的activityViewIndicatorStyle
屬性。
啊哈!我剛剛偶然發現方便的課程:MBProgressHUD。試一試。我相信它是做你所追求的,然後是一些。
我也在作者的博客文章評論中貢獻了一些mods。
您需要爲動畫的開始和停止之間需要完成的工作實現一個新的線程。 如下圖:
http://discussions.apple.com/thread.jspa?threadID=1531358&start=0&tstart=0
您的問題將是該活動的指標將不會顯示,因爲它只會在下一次通過運行循環顯示 - 到那時你會做你需要的一切!
這樣做的非常非常非常簡單的方法是將你的代碼中調用下一個視圖到它自己的方法,然後(已建成了UIActivityIndicator按其他職位在這裏)就
[self.myactivityindicator startAnimating];
[self performSelector:@selector(myCodeToCallTheView) withObject:nil afterDelay:0];
這給剛剛夠在運行代碼繪製視圖之前繪製指標的機會。當然,一旦你的新視圖出現,它會覆蓋選擇器。
似乎只是我一直在尋找的東西。你有這樣的例子代碼嗎? (在Objective-C中仍然有點生疏) – 2009-07-16 11:39:59
如果你在界面構建器中有一個視圖控制器,只需使它成爲你自己的UIViewController子類的子類。然後將IBOutlet UIActivityIndicatorView添加到視圖。讓我們說IBOutlet UIActivityIndicatorView指標;然後您只需調用[indicator startAnimating]或[indicator stopAnimating]; (我認爲這是該消息的正確名稱 – jcb 2009-07-16 12:03:26
啊對不起,我沒有詳細說明,但我沒有使用IB,應用程序快完成了,所以我寧願不要在這一點上開始使用它:) – 2009-07-16 12:06:49