我想在某个特定NSView
的- (NSRect)visibleRect
更改时收到通知,因为我想根据可见的矩形做一些花哨的子视图布局。坦率地说,现在我很难过;-visibleRect
不发出 KVO 通知(这是有道理的),并且似乎没有办法在不明确调用-visibleRect
.
这是可能吗?(或者这是一个可怕的、可怕的想法?)
我想在某个特定NSView
的- (NSRect)visibleRect
更改时收到通知,因为我想根据可见的矩形做一些花哨的子视图布局。坦率地说,现在我很难过;-visibleRect
不发出 KVO 通知(这是有道理的),并且似乎没有办法在不明确调用-visibleRect
.
这是可能吗?(或者这是一个可怕的、可怕的想法?)
我认为您可以覆盖-[NSView updateTrackingAreas]
或收听NSViewDidUpdateTrackingAreasNotification
. 这些可能发生在更多场合,而不仅仅是可见矩形的变化,但它们应该发生在可见矩形的任何变化上。我认为。
也就是说,这可能是一个糟糕的主意。很难知道。:)
10.5 后的另一个选项是 -viewWillDraw 方法,该方法在视图(及其子视图)被绘制之前被调用。您可以在调用 [super viewWillDraw] 之前获取视图的可见矩形并执行布局。
Ken 关于监听跟踪区域变化的建议感觉很老套,但似乎有效,尽管它们仅在调整大小完成后才会触发。如果您像我一样在调整大小期间需要更新,它-[NSView resizeWithOldSuperviewSize:]
会覆盖
至少对于 NSScrollView,adjustTrackingArea 解决方案在 Mojave 中似乎不可行。Mojave 在滚动 NSScrollView 时似乎并不总是调用 adjustTrackingArea。尚未测试其他操作系统版本,其他视图类型。