现在跑步活动指示器
Posted
技术标签:
【中文标题】现在跑步活动指示器【英文标题】:Running activity indicator NOW 【发布时间】:2010-10-18 18:35:27 【问题描述】:我想在进行磁盘 I/O 之前启动一个活动指示器。
如何立即启动指示器,而不是等待下一个显示循环周期?或者如何在开始磁盘 I/O 之前强制显示循环?
丹
【问题讨论】:
【参考方案1】:如果我理解正确,您的 IO 操作需要一些时间,并且您希望 UI 在执行时更新,对吗?如果是这种情况,您必须将操作移动到后台线程,以便 UI 有机会自行更新,没有解决方法。使用 performSelectorInBackground:withObject:
调用您的 IO 操作,使用 NSOperation
,如果您的目标是 ios 4.0+,则使用块
【讨论】:
这些都是好主意。让我更全面地解释一下。通常,当我有一个复杂的视图要显示时,我会启动注意力指示器,然后使用 performSelector 延迟添加Subview 或 setNeedsDisplay。但是在这种情况下,我需要读取一个 XML 文件并构建一个大型数据结构以显示视图。所以我不能在后台运行。 所以读取 XML 文件并在后台线程中构建您的大型数据结构,而进度指示器在主线程中旋转。 谢谢丹尼尔。但这并没有改变任何东西。我无法在后台运行,因为在构建结构之前无法显示新视图。我错过了什么? 抱歉浪费了您的时间。 performSelector 确实有效。我有一个编码错误。 - 丹【参考方案2】:据我所知,您不能强制指标现在开始。要推送一个方法调用,使其成为 runloop 中的下一件事,您可以使用:
[self performSelector:@selector(taskToDo) withObject:nil afterDelay:0]
这会将“taskToDo”(可以选择使用单个参数)调度到当前运行循环中,以便尽快发生。然后让那段代码退出。一种等效的方法是安排一个 NSTimer,但从语法上讲,这有点冗长。
【讨论】:
谢谢。我尝试了 performSelector 但它没有改变任何东西。 performSelector:withObject: 在这个意义上与直接调用完全一样。 performSelector:withObject:afterDelay: 为以后安排一些事情。你试过后者吗? 嗨,汤米,是的,我有。请参阅我对 Mo 的回复。 抱歉浪费了您的时间。 performSelector 确实有效。我有一个编码错误。 - 丹 它对我有用,但只有 0.1 的延迟(0 在 iOS 4.0.1 上不起作用)以上是关于现在跑步活动指示器的主要内容,如果未能解决你的问题,请参考以下文章
在 swift 4 中使用 webkit 在 webView 中导航时创建活动指示器