9

目に見える長方形に基づいていくつかの派手なサブビューレイアウトを行いたいので、特定NSViewの変更があったときに通知を受け取りたいです。- (NSRect)visibleRect率直に言って、今私は困惑しています。-visibleRectKVO通知を発行しません(これは理にかなっています)。また、明示的にを呼び出さずに、表示されているrectが変更されたかどうかを確認する方法はないようです-visibleRect

これは可能ですか?(またはそれはひどい、ひどい考えですか?)

4

4 に答える 4

6

-[NSView updateTrackingAreas]オーバーライドするか、リッスンできると思いますNSViewDidUpdateTrackingAreasNotification。これらは、目に見える長方形の変更だけでなく、より多くの場合に発生する可能性がありますが、目に見える長方形の変更に対しても発生するはずです。おもう。

そうは言っても、それはひどい考えかもしれません。知るのは難しい。:)

于 2012-05-26T06:11:20.123 に答える
1

10.5以降のもう1つのオプションは、ビュー(およびそのサブビュー)が描画される直前に呼び出される-viewWillDrawメソッドです。[super viewWillDraw]を呼び出す前に、ビューの表示されている長方形をフェッチしてレイアウトを実行できます。

于 2012-12-17T15:13:37.900 に答える
0

追跡領域の変更をリッスンするというKenの提案は、ハッキーな感じがしますが、サイズ変更が完了した後にのみトリガーされますが、機能しているようです。私のようにサイズ変更中に更新が必要な場合は、オーバーライド-[NSView resizeWithOldSuperviewSize:]するとそれが行われます

于 2013-02-08T11:20:08.337 に答える
0

AdjustTrackingAreaソリューションは、少なくともNSScrollViewのMojaveでは実行可能ではないようです。NSScrollViewのスクロール中に、Mojaveが常にadjustTrackingAreaを呼び出すとは限りません。他のOSバージョン、他のビュータイプはテストしていません。

于 2018-10-10T00:54:15.850 に答える