キャプチャのサンプルを作る過程でキー入力のハンドリングが必要になった。今までのサンプルではウィンドウをNIB経由ではなく実行時に動的に作っていた。このウィンドウは NSBorderlessWindowMask スタイルで作ってあるためにそのままではキーイベントが拾えない。そこでいくつかの必要な実装を加える。
まず NSWindowのサブクラスを作り canBecomeKeyWindowをオーバーライドする。
@interface MyWindow : NSWindow { }
@end
@implementation MyWindow
- (BOOL)canBecomeKeyWindow { return YES; }
@end
その上でこのサブクラスを使うようにする。
(旧)_fullscreen_window = [[NSWindow alloc] initWithContentRect:
(新)_fullscreen_window = [[MyWindow alloc] initWithContentRect: ...
最後に keyDown: を実装する。
ビューの方でハンドリングしたい場合は acceptsFirstResponder をオーバーライドし、keyDown: を実装する。
- (BOOL)acceptsFirstResponder
{
NSLog(@"acceptFirstResponder");
- (void)keyDown:(NSEvent *)theEvent
{
NSLog(@"keyDown:");
}
またウィンドウのレスポンダチェインへ追加する。
[_fullscreen_window setNextResponder:_fullscreen_view];