第3回目 Cocoaでキー操作

Cocoaでキーイベントを受け取る方法です。
keyevent1.png
まずXcodeを起動してメニューの「ファイル」-「新規プロジェクト」を選択する。
keyevent2.png
Cocoa Applicationを選んで「次へ」ボタンを押す。
keyevent3.png
プロジェクト名を決めて「完了」ボタンを押す。
今回はKeyBoardSampleというプロジェクト名にした。
ここまではOpenGLSampleと一緒。
keyevent4.png
ファイルとグループのKeyBoardSampleを右クリックしてメニューを出し「追加」-「新規のファイル」を選ぶ。
keyevent5.png
Objective-C NSView subclassを選んで「次へ」ボタンを押す。
keyevent6.png
ファイル名はMyView.mに設定して「完了」ボタンを押す。
今回はOpenGLは使わないためMSViewを作ることにしました。

Interface Builderでの作業

keyevent7.png
XcodeのファイルとグループにあるMainMenu.nibをダブルクリックする。
するとInterface Builderが起動する。
keyevent8.png
Windowの白い部分を選びMyViewIdentityウインドウのClassにNSViewを表示させる。
keyevent9.png
MyViewIdentityのClassをNSViewからMyViewに変更する。

プログラム追加

MyView.m

先ほど作った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キーを押したり離したりするとデバッガコンソールウインドウに表示されます。
keyevent10.png

前に戻る


添付ファイル: filekeyevent9.png 183件 [詳細] filekeyevent8.png 186件 [詳細] filekeyevent7.png 181件 [詳細] filekeyevent6.png 186件 [詳細] filekeyevent5.png 184件 [詳細] filekeyevent4.png 186件 [詳細] filekeyevent3.png 179件 [詳細] filekeyevent2.png 189件 [詳細] filekeyevent10.png 186件 [詳細] filekeyevent1.png 188件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-12-16 (日) 15:25:51 (1987d)