Cocoaでキーイベントを受け取る方法です。 まずXcodeを起動する。
#ref(): File not found: "keyevent1.png" at page "Cocoaでキー操作"
メニューの「ファイル」-「新規プロジェクト」を選択する。
#ref(): File not found: "keyevent2.png" at page "Cocoaでキー操作"
Cocoa Applicationを選んで「次へ」ボタンを押す。
#ref(): File not found: "keyevent3.png" at page "Cocoaでキー操作"
プロジェクト名を決めて「完了」ボタンを押す。 今回はKeyBoardSampleというプロジェクト名にした。 ここまではOpenGLSampleと一緒。
#ref(): File not found: "keyevent4.png" at page "Cocoaでキー操作"
ファイルとグループのKeyBoardSampleを右クリックしてメニューを出し「追加」-「新規のファイル」を選ぶ。
#ref(): File not found: "keyevent5.png" at page "Cocoaでキー操作"
Objective-C NSView subclassを選んで「次へ」ボタンを押す。
#ref(): File not found: "keyevent6.png" at page "Cocoaでキー操作"
ファイル名はMyView.mに設定して「完了」ボタンを押す。 今回はOpenGLは使わないためMSViewを作ることにしました。
#ref(): File not found: "keyevent7.png" at page "Cocoaでキー操作"
XcodeのファイルとグループにあるMainMenu.nibをダブルクリックする。 するとInterface Builderが起動する。
#ref(): File not found: "keyevent8.png" at page "Cocoaでキー操作"
Windowの白い部分を選びMyViewIdentityウインドウのClassにNSViewを表示させる。
#ref(): File not found: "keyevent9.png" at page "Cocoaでキー操作"
MyViewIdentityのClassをNSViewからMyViewに変更する。
先ほど作ったMyView.mに以下のプログラムを追加する。
awakeFromNibとacceptFirstResponderを追加する。
これが無いとキーメッセージが来ない?
- (void)awakeFromNib
{
[[self window] makeFirstResponder:self];
}
- (BOOL)acceptFirstResponder
{
return YES;
}
keyDownはキーが押されたとき、keyUpは離された時に実行される。
今回は押されたり離されたりするたびにNSLogでメッセージを出力している。
- (void)keyDown:(NSEvent *)theEvent
{
NSString *keys = [theEvent charactersIgnoringModifiers];
if(keys && [keys length] > 0)
{
unichar c = [keys characterAtIndex:0];
if(c == NSUpArrowFunctionKey)
{
NSLog(@"UpArrow down.") ;
}
else if(c == NSDownArrowFunctionKey)
{
NSLog(@"DownArrow down.") ;
}
else if(c == NSLeftArrowFunctionKey)
{
NSLog(@"LeftArrow down.") ;
}
else if(c == NSRightArrowFunctionKey)
{
NSLog(@"RightArrow down.") ;
}
else if(c == 'z')
{
NSLog(@"z down.") ;
}
else if(c == 'x')
{
NSLog(@"x down.") ;
}
}
}
- (void)keyUp:(NSEvent *)theEvent
{
NSString *keys = [theEvent charactersIgnoringModifiers];
if(keys && [keys length] > 0)
{
unichar c = [keys characterAtIndex:0];
if(c == NSUpArrowFunctionKey)
{
NSLog(@"UpArrow up.") ;
}
else if(c == NSDownArrowFunctionKey)
{
NSLog(@"DownArrow up.") ;
}
else if(c == NSLeftArrowFunctionKey)
{
NSLog(@"LeftArrow up.") ;
}
else if(c == NSRightArrowFunctionKey)
{
NSLog(@"RightArrow up.") ;
}
else if(c == 'z')
{
NSLog(@"z up.") ;
}
else if(c == 'x')
{
NSLog(@"x up.") ;
}
}
}
矢印キー、z、xキーを押したり離したりするとデバッガコンソールウインドウに表示されます。
#ref(): File not found: "keyevent10.png" at page "Cocoaでキー操作"