*第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%)

[[前に戻る>プログラミング]]


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS