2

したがって、Apple の ScrollView プログラミング ガイドとまったく同じように、awakeFromNib でプログラムによって構築された、この単純なカスタム NSView-inside-NSScrollView セットアップがあります。

カスタム ビュー (NSScrollView の documentView) には、最初は特定のフレーム サイズがあり、スクロール位置はカスタム ビューの原点のままです。ユーザーが開始したり、プログラムによるスクロールは行われません。

ここで、別のスレッドから performSelectorOnMainThread を発行して、カスタム ビューで setFrameSize(newSize) を呼び出してカスタム ビューのフレームサイズを変更し、高さだけを大きくします。原点と幅は同じままです。

ここでの問題は、 (0, 0, viewwidth, viewheight) のダーティ rect を持つカスタム ビューで、おそらくココアによって呼び出された drawRect: を取得するのはなぜですか? これは奇妙だと思います。少なくとも、何も変更されていない領域に再描画要求があるため、最適ではありません。たとえば、高さが 10000 から 10300 に拡張されました。これは、その時点で表示されている rect (0、0、viewwidth、viewheight) に表示されている rect とは関係ありません。

NSView のクラス参照から、setNeedsDrawInRect: などを発行しない限り、setFrameSize: によって drawRect: がトリガーされないと想定していました。

それで、NSScrollView に含まれている場合、含まれているビューへのこの drawRect: 呼び出しが Cocoa によって行われる理由を知っている人はいますか? そして、どのオブジェクト (NSScrollView、NSClipView、NSNotificationCenter...) がこの呼び出しを発行していますか?

どんなヒントでも大歓迎です、ヨルグ

4

0 に答える 0