跟踪方法iOS的进度?

时间:2012-09-26 13:05:21

标签: objective-c ios progress-bar observer-pattern

一般来说,有没有办法跟踪方法的完成进度?有某种观察者或某种类似的东西。

我一直在寻找,但只有关于如何通过互联网请求实现它的参考。我知道怎么做,但我想跟踪特定方法的进度。有可能吗?

在这种情况下,我想要跟踪的方法是UISaveVideoAtPathToSavedPhotosAlbum。我不知道是否有可能。如果可能的话,我特别感兴趣。

非常感谢您的建议!!

3 个答案:

答案 0 :(得分:2)

有三种常见的编码模式可用于异步操作的函数/方法的进度更新:

  1. 异步函数/方法可以将selector作为参数,并且可以按照文档调用该方法。这仅在报告某些异步事件的完成时非常有用,例如在UISaveVideoAtPathToSavedPhotosAlbum中。

  2. protocols(其中您的后台进程将具有一些delegate属性,该属性定义哪个对象将符合协议,从而被通知关键事件或进度。

  3. notifications后台进程通过NSNotificationCenter通知,以及哪些对象将调用addObserver以接收通知。

  4. 如果您正在编写自己的后台进程,则可以使用这些技术中的任何一种(我通常使用委托),但如果您使用的是某些现有框架或第三方库,那么您将依赖于任何通知/委托他们可能提供的接口。如果框架/库没有提供任何这样的接口,那么你运气很大。

    对于UISaveVideoAtPathToSavedPhotosAlbum,您只有completionTargetcompletionSelector异步通知您流程的完成情况(例如,您可以拥有一些UIActivityIndicatorView个微调器显示正在进行保存,然后停止completionSelector中的活动指示器,但我认为此功能没有任何临时进度界面。

答案 1 :(得分:2)

软件中看到的许多进度指标实际上是伪造的,或者最多表示操作的一部分完成而不是时间(并非总是相同)。显然,在没有任何有形的东西可以测量的情况下,或者在有测量的情况下,有一种方法可以衡量它。

UISaveVideoAtPathToSavedPhotosAlbum的情况下,似乎无法获得部分完成的通知 - 仅完全完成。

现代用户界面设计实践中非常明显的是,进度指标现在通常没有显示操作完成的比例。有一种思想流派显示一个指标,它没有显示完成的比例优于显示错误比例的指标。

如果您想沿着伪造进度指示器的路线前进,最好的办法是在开发过程中测量操作所需的时间,并在此基础上设置进度指示器的动画。经过一些操作后,您将能够优化估算。很明显,用户不太可能抱怨操作所花费的时间少于进度指示器所显示的时间,但他们会注意到它需要更多时间。您可以选择超出预期并延长初始估算。

Apple过去常常在旧版MacOSX上启动的UI上使用此技巧。他们在每次连续启动时都会改进估计。

答案 2 :(得分:1)

没有通用的解决方案。这取决于相关方法的作者是否提供了一种请求回调或询问进度的方法。

从文档中可以看出UISaveVideoAtPathToSavedPhotosAlbum仅提供完成回调,因此无法定期更新。