環境
をNSPopoverP
とし、view
に含まれるサブビューである NSView にしますP
。
私が必要なもの
のフレームを取得して、画面の座標系view
に変換したい。通常、次のようにします。
NSRect frameRelativeToWindow = [self convertRect:self.frame relativeToView:nil];
[self.window convertRectToScreen:frameRelativeToWindow];
ただし、view
は NSPopover にあるため、そのwindow
プロパティは nil であり、上記のメソッドは NSZeroRect: [0, 0, 0, 0] を返します。
では、ビューが NSPopover にある場合、ビューのフレームを画面座標で取得するにはどうすればよいでしょうか?
ノート:
- NSPopover は画面上に表示されます。
- フレームを画面座標に変換しようとしているビューは、NSPopover またはその contentView の直接のサブビューではありません。問題のビューは、実際には、NSClipView 内の NSScrollView 内の NSTableView 内の NSTableCellView 内のカスタム NSView です。clipView は、NSPopover の contentView の直接のサブビューです。
- 通常の NSWindow では、任意のサブビュー
[self window]
を取得して呼び出し、含まれている NSWindow オブジェクトを取得できます。ただし、ポップオーバーでそれを行うと、nil が返されます。