【问题标题】:how to detect interface changes on iOS application如何检测iOS应用程序的界面变化
【发布时间】:2014-04-11 11:36:53
【问题描述】:

是否有任何可能的方法来检测运行时用户界面上的每一个变化??

我正在尝试查找当前应用界面中的所有对象。

我试图让所有节点递归地检查主窗口,但是,例如,如何知道顶部 viewcontroller 是否发生变化,或者它是否动态添加了 uiview,或者呈现的是 modalview??

主要目标是有一个图书馆来做到这一点..

有什么想法吗,帮忙?

谢谢!

【问题讨论】:

  • 你为什么需要这个?听起来这对设备来说是一个地狱般的工作量。您想构建一些特定的 AI 还是只是简单的统计数据?
  • 是的,确实......也许两者兼而有之......
  • 也许this tool called Reveal是你想要的?
  • @HAS,不,Reveal 无济于事..

标签: ios uiview uiviewcontroller runtime introspection


【解决方案1】:

您可以在此基础上使用高级 Objective-C 技术编写自己的库。我不建议你这样做,因为它主要破坏了 iOS 上的 MVC 模式。取决于你想用它做什么,也许是分析?

因此,如果您想主动检查 UIView 层次结构,我相信这些选项。不过,所有选项都相当复杂。

  • Swizzle methods 例如addSubviewremoveFromSuperviewUIView,这样你就可以知道什么时候发生这样的变化。如果您想知道位置,包括 frame 和 bounds 的 getter。

  • 您可以使用 KVO 来观察属性,例如:subviewsframeboundssuperview 以发现任何变化。但在某一时刻,您必须添加与观察者相同的对象(可能是单例)。

  • 确定由 a NSTimer 触发的间隔,并在 UIApplication 上从 keyWindow 开始递归地遍历层次结构。不过,这会对性能产生很大影响。

可能还有其他选择,但我认为这些是最好的选择。

【讨论】:

  • 我已经尝试将观察者添加到窗口子视图属性。不走运,observeValueForKeyPath 没有被调用..
  • 问题stackoverflow.com/questions/6612523/…UIKit 中解释了更多关于KVO 的信息。显然不是一个很好的主意。调酒将是下一个尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 2020-11-09
  • 2015-07-08
相关资源
最近更新 更多