我一直试图实施这个问题很长时间没有取得好成绩。
假设我有一个执行HTTP请求的方法(特别是推特更新),并说我想在HTTP请求正在进行时显示UIActivityIndicatorView
(我知道什么时候完成因为在请求完成时会调用委托方法,无论是正结果还是负结果。)
我看过很多答案,说线程是实现这个类所必需的。起初我尝试在另一个线程和startAnimating
方法中直接调用stopAnimating
方法(不启动新线程)。在那之后我看到了this guy是如何做到的,我认为这更安全,因为我开始并以两种不同的方法停止指标(twitter更新的委托方法)。
但是,这两种方法都没有给我我想要的结果(活动指标根本没有显示)。有什么我想念的吗?
提前感谢您,如果我的问题太长,我会道歉 非常感谢您的帮助。
答案 0 :(得分:4)
使用UIKit子类时绝对禁止线程化。您可能已经看到UIActivityIndicatorView在内部使用线程的报告,但这绝不意味着您可以从多个线程访问该对象。必须只能从主线程访问所有UIView子类(包括UIActivityIndicatorView)。这包括致电-startAnimating
和-stopAnimating
。
如果你重写代码使得你只是访问主线程上的活动视图,但它仍然无法正常工作,那么我猜测该视图未被添加到可见视图中,被覆盖通过另一个视图,或者有一个框架将自己置于超视图的可见区域之外。
答案 1 :(得分:0)
答案 2 :(得分:0)
MBProgressHUD它也很简单,当辅助线程启动/完成时显示和隐藏自己。像这样:
[HUD showhileexecuting:"yourstuff" animated:YES]
“Yourstuff”将在一个单独的线程上运行。
您不应在辅助线程中执行UI活动。