9

我想在某个特定NSView- (NSRect)visibleRect更改时收到通知,因为我想根据可见的矩形做一些花哨的子视图布局。坦率地说,现在我很难过;-visibleRect不发出 KVO 通知(这是有道理的),并且似乎没有办法在不明确调用-visibleRect.

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

4

4 回答 4

6

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

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

于 2012-05-26T06:11:20.123 回答
1

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

于 2012-12-17T15:13:37.900 回答
0

Ken 关于监听跟踪区域变化的建议感觉很老套,但似乎有效,尽管它们仅在调整大小完成后才会触发。如果您像我一样在调整大小期间需要更新,它-[NSView resizeWithOldSuperviewSize:]会覆盖

于 2013-02-08T11:20:08.337 回答
0

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

于 2018-10-10T00:54:15.850 回答