如何检测iOS应用程序上的界面更改

时间:2014-04-11 11:36:54

标签: ios uiview uiviewcontroller runtime introspection

有没有办法在运行时检测用户界面上的每个更改?

我试图找到当前应用界面中的所有对象。

我试图让所有节点递归地检查主窗口,但是,例如,如何知道顶部视图控制器是否发生变化,或者它是否动态添加了uiview,或者是一个模态视图??

主要目标是建立一个图书馆。

任何想法,帮助?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

因此,如果您想积极检查UIView层次结构,那么这些是我认为的选项。但是所有选项都非常复杂。

  • Swizzle methods ,例如addSubview的{​​{1}}和removeFromSuperview,因此您可以知道此类更改何时发生。如果您想知道位置,请包括框架和边界的吸气剂。

  • 您可以使用 KVO 来观看以下属性:UIViewsubviewsframebounds注意到任何变化。但有一点你必须添加与观察者相同的对象(可能是单身)。

  • 确定由 a superview 触发的间隔,然后从NSTimer keyWindow开始递归遍历层次结构。这会产生很大的性能影响。

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