2012-09-26 57 views
0

一般來說,有沒有辦法跟蹤完成方法的進度?用某種觀察者或類似的東西。跟蹤iOS方法的進度?

我一直在尋找,但只有關於如何實現它與互聯網請求的參考。我知道該怎麼做,但我想跟蹤特定方法的進度。可能嗎?

在這種情況下,我想跟蹤的方法是UISaveVideoAtPathToSavedPhotosAlbum。我不知道這是否可能。如果一般可能,我特別感興趣。

非常感謝您的建議!

+0

你對剛剛完成還是完成量感興趣? – marko

回答

2

存在用於進度更新爲函數/異步操作的方法三種常見的編碼模式:

  1. 異步函數/方法可以採取selector作爲參數,並可以如記錄被調用該方法。當簡單地報告某個異步事件的完成時,這很有用,例如在UISaveVideoAtPathToSavedPhotosAlbum中。

  2. protocols(其中您的後臺進程將有一些delegate屬性,它定義哪個對象將符合該協議,從而通知關鍵事件或進度)。

  3. notifications其中後臺進程通過NSNotificationCenter通知和哪些對象將調用addObserver爲了接收通知。

如果你正在寫自己的後臺進程,您可以使用這些技術的任何(我一般用委託),但如果你使用一些現有的框架或第三方庫,你在依賴無論他們可能提供了什麼通知/委託接口。如果框架/庫沒有提供任何這樣的接口,那麼你的運行很不好。

UISaveVideoAtPathToSavedPhotosAlbum的情況下,你只擁有completionTargetcompletionSelector異步通知您的過程(如完成的,所以你可以有一些UIActivityIndicatorView微調顯示出保存正在進行中,然後停止活動指示燈在completionSelector),但我不認爲這個函數有任何臨時進度界面。

+0

非常感謝您的完整答案。事實上,這是我的想法,我希望也許我可以制定一個適當的進度指標。但我想這取決於方法是否真的允許它。 – Joze

1

沒有通用的解決方案。這取決於相關方法的作者是否提供了請求回調或詢問進度的方式。

從文檔看來,UISaveVideoAtPathToSavedPhotosAlbum只提供完成回調,因此無法獲得定期更新。

2

在軟件中看到的很多進度指標實際上是假的,或者最多表明操作的一部分完成而不是時間(並非總是相同)。很顯然,在沒有可衡量的東西的情況下,或者在存在衡量它的手段的情況下,情況就會如此。

UISaveVideoAtPathToSavedPhotosAlbum的情況下,似乎無法獲得部分完成的通知 - 只有完全完成。

在現代UI設計實踐中,相當明顯的是進度指示器現在通常不會顯示操作完成的比例。有一個思想流派顯示一個沒有顯示完成比例的指標比顯示錯誤比例的指標要好。

如果您想要僞造一個進度指示器的路線,最好的方法是在開發過程中測量操作所需的時間,並在此基礎上爲您的進度指示器設置動畫。經過幾次操作後,您可以改進估算。顯然,用戶不太可能抱怨比進度指示器顯示的時間更少的操作,但他們會注意到何時需要更多的時間。您可能會選擇超出預期並延長您的初始估計。

Apple在舊版本的MacOSX上用於在啓動時顯示的用戶界面上使用這種技巧。他們在每次接連引導時都會提高估計。

+0

非常感謝Marko,假裝它確實是一個好主意。雖然我不願意這樣做,但由於最佳做法洗腦。 – Joze