我正在构建一个第三方库,我计划将其集成到不同的项目中,因此我需要将其作为模块化并尽可能具有非破坏性。我需要“挂钩”UIView
s的帧更改。我正在构建一个类别,并且从该类别方法,我需要挂钩该视图(它可以是任何常规的UIView
或子类)框架更改,并执行我的附加逻辑。我看过KVO,但正如https://stackoverflow.com/a/19701380/811405所见,这不是一个安全的方法。
如何挂钩UIView
的换帧?我可以在我的类别中覆盖setFrame:
,但我知道这是Objective-C程序员可以做的最糟糕的事情:覆盖类别中的默认方法。我如何实现这一目标?
更新:我目前正致力于一个非常丑陋(但有效)的解决方案:
drawRect:
)UIView
子类。YES
。setFrame:
,以通过委派通知相应的对象。因为当autoresizesSubviews为YES时,superview将使用灵活的自动调整掩码设置所有子视图的框架,这可行,但它涉及在视图中添加隐藏视图,这有点hacky并且可能在某些情况下产生问题(尽管大多数情况下)是角落案件)。我仍在寻找更合适/更少hacky的解决方案。