从第三方库中获取UIView的框架更改

时间:2014-11-29 20:40:09

标签: objective-c uiview frame

我正在构建一个第三方库,我计划将其集成到不同的项目中,因此我需要将其作为模块化并尽可能具有非破坏性。我需要“挂钩”UIView s的帧更改。我正在构建一个类别,并且从该类别方法,我需要挂钩该视图(它可以是任何常规的UIView或子类)框架更改,并执行我的附加逻辑。我看过KVO,但正如https://stackoverflow.com/a/19701380/811405所见,这不是一个安全的方法。

如何挂钩UIView的换帧?我可以在我的类别中覆盖setFrame:,但我知道这是Objective-C程序员可以做的最糟糕的事情:覆盖类别中的默认方法。我如何实现这一目标?

更新:我目前正致力于一个非常丑陋(但有效)的解决方案:

  • 我创建了一个不可见的(空drawRect:UIView子类。
  • 我正在实例化并将其添加到我希望收到帧更改通知的视图中。
  • 我正在设置该视图(“超级视图”)将视图自动调整为YES
  • 我将“隐形”视图的自动调整遮罩设置为灵活的宽度和高度。
  • 我正在覆盖我的“隐形”视图setFrame:,以通过委派通知相应的对象。

因为当autoresizesSubviews为YES时,superview将使用灵活的自动调整掩码设置所有子视图的框架,这可行,但它涉及在视图中添加隐藏视图,这有点hacky并且可能在某些情况下产生问题(尽管大多数情况下)是角落案件)。我仍在寻找更合适/更少hacky的解决方案。

0 个答案:

没有答案