メインの NSWindow プロパティ用のカスタム NSView を備えた Mac OS X (10.9) アプリケーションがありcontentView
ます。カスタム ビューが行う唯一のことは、drawRect:
透明になるようにオーバーライドすることです。NSOpenGLView が表示されるようにするには、透明性が必要です (以下を参照)。
/* Transparent NSView Subclass */
- (void)drawRect:(NSRect)dirtyRect
{
NSLog(@"Drawing Rect");
[[NSColor clearColor] set];
NSRectFillUsingOperation(dirtyRect, NSCompositeClear);
}
サブビューとして NSOpenGLView があり、そのcontentView
表面の順序が -1 に設定されています (メインの NSWindow の「下」にあり、これも透過的です)。
/* NSOpenGLView subclass: */
GLint order = -1;
[self.openGLContext setValues:&order forParameter:NSOpenGLCPSurfaceOrder];
次に、WebView をインスタンス化し、このカスタム ビューのサブビューとして配置します。
_webview = [[WebView alloc] initWithFrame:frame];
[_webview setMaintainsBackForwardList:NO];
[_webview setTranslatesAutoresizingMaskIntoConstraints:NO];
[_webview setDrawsBackground:NO];
[_window.contentView addSubview:_webview];
WebView は、サービスへのログインに使用される (NSOpenGLView の上にある) ウィンドウ内の小さなボックスです。ログインが発生すると、NSOpenGLView のみが表示されて消えます。
問題は次のとおりです。呼び出すと[_webview removeFromSuperview];
、contentView
再描画されません。したがって、WebView は引き続き画面に描画されます (ただし、マウスやキーボードには反応しません)。マウスを使用してすべてのウィンドウのサイズを変更すると、contentView
再描画され (ログにメッセージが表示されます)、WebView のコンテンツが消えます。また、NSOpenGLView をサブビューとして追加しないと、WebView が消えてしまいます。
サブビューが削除されcontentView
た後に発火するべきではありませんか? WebViewdrawRect
を使用した場合、setNeedsDisplay:
または削除した後でも、再描画されませんでした。setNeedsLayout:
contentView