- 追加された行はこの色です。
- 削除された行はこの色です。
*第3回目 Cocoaでキー操作 [#nb120e58]
Cocoaでキーイベントを受け取る方法です。
#ref(cocoa_opengl2_4.png,,,100%)
まずXcodeを起動する。
#ref(keyevent1.png,,,100%)
メニューの「ファイル」-「新規プロジェクト」を選択する。
#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に以下のプログラムを追加する。
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%)
[[前に戻る>Mac]]