2012-09-26 60 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