*第3回目 Cocoaでキー操作 [#nb120e58] Cocoaでキーイベントを受け取る方法です。 #ref(keyevent1.png,,,100%) まずXcodeを起動してメニューの「ファイル」-「新規プロジェクト」を選択する。 #ref(keyevent2.png,,,100%) Cocoa Applicationを選んで「次へ」ボタンを押す。 #ref(keyevent3.png,,,100%) プロジェクト名を決めて「完了」ボタンを押す。 今回はKeyBoardSampleというプロジェクト名にした。 ここまではOpenGLSampleと一緒。 #ref(keyevent4.png,,,100%) ファイルとグループのKeyBoardSampleを右クリックしてメニューを出し「追加」-「新規のファイル」を選ぶ。 #ref(keyevent5.png,,,100%) Objective-C NSView subclassを選んで「次へ」ボタンを押す。 #ref(keyevent6.png,,,100%) ファイル名はMyView.mに設定して「完了」ボタンを押す。 今回はOpenGLは使わないためMSViewを作ることにしました。 **Interface Builderでの作業 [#e7559b9f] #ref(keyevent7.png,,,100%) XcodeのファイルとグループにあるMainMenu.nibをダブルクリックする。 するとInterface Builderが起動する。 #ref(keyevent8.png,,,100%) Windowの白い部分を選びMyViewIdentityウインドウのClassにNSViewを表示させる。 #ref(keyevent9.png,,,100%) MyViewIdentityのClassをNSViewからMyViewに変更する。 **プログラム追加 [#u9808426] ***MyView.m [#ecb3c98b] 先ほど作ったMyView.mに以下のプログラムを追加する。 #author("2018-06-18T16:15:41+09:00","default:kuran","kuran") 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.") ; } } } **実行結果 [#ud070179] 矢印キー、z、xキーを押したり離したりするとデバッガコンソールウインドウに表示されます。 #ref(keyevent10.png,,,100%) [[前に戻る>プログラミング]]