2012-05-26 73 views
6

我希望在某个NSView- (NSRect)visibleRect发生更改时收到通知,因为我想根据可见矩形做一些奇特的子视图布局。坦率地说,现在我很难过; -visibleRect不会发出KVO通知(这是有道理的),并且似乎没有办法在没有明确地呼叫-visibleRect的情况下查明可见矩形是否改变。是否可以观察-visibleRect

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

+1

为什么减号1? – Vervious

回答

6

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

这就是说,这可能是一个可怕的想法。很难知道。 :)

+0

可行,谢谢。 – Vervious

+0

好的问题和答案。这个答案帮助我摆脱了我面临的另一个问题,但我也有这个问题。对于这个问题,我会投票答复,但不接受它。 – trss

+0

'updateTrackingAreas'的文档中提到“当视图的几何变化时需要重新计算其跟踪区域时自动调用”。但不清楚视图的几何意味着什么。 View Geometry有一个主题,但只解释边界和框架。它确实解释了visibleRect,但它并没有将其称为视图的几何体。 – trss

1

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

0

肯的建议聆听跟踪区域的变化感觉hacky但似乎工作,虽然他们只在调整大小完成后触发。如果您需要像调整大小时那样需要更新,则重写-[NSView resizeWithOldSuperviewSize:]将会这样做

相关问题