是否可以观察-visibleRect

时间:2012-05-26 05:45:47

标签: objective-c cocoa osx-lion nsview

我希望在某个NSView的{​​{1}}更改时收到通知,因为我想根据可见的rect进行一些奇特的子视图布局。坦率地说,现在我很难过; - (NSRect)visibleRect不会发出KVO通知(这是有意义的),并且似乎没有办法在没有显式调用-visibleRect的情况下查明可见的rect是否发生了变化。

这一切都可能吗? (或者这是一个可怕的,可怕的想法?)

4 个答案:

答案 0 :(得分:6)

我认为您可以覆盖-[NSView updateTrackingAreas]或收听NSViewDidUpdateTrackingAreasNotification。这些可能发生在更多场合,而不仅仅是可见矩形的变化,但它们应该发生在可见矩形的任何变化上。我想。

那就是说,这可能是一个糟糕的主意。很难知道。 :)

答案 1 :(得分:1)

10.5之后的另一个选项是-viewWillDraw方法,该方法在绘制视图(及其子视图)之前调用。您可以在调用[super viewWillDraw]之前获取视图的可见矩形并执行布局。

答案 2 :(得分:0)

Ken关于跟踪区域变化的建议感觉很糟糕但似乎有效,尽管它们仅在调整大小完成后触发。如果您在调整大小期间需要更新,那么覆盖-[NSView resizeWithOldSuperviewSize:]将会执行此操作

答案 3 :(得分:0)

adjustTrackingArea解决方案在Mojave中至少对于NSScrollView似乎不可行。 在滚动NSScrollView时,Mojave似乎并不总是调用AdjustTrackingArea。 尚未测试其他操作系统版本和其他视图类型。