[Mac] トラックパッドのスワイプのイベントを受け取る

2011年1月22日土曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

MacBook Pro の何が便利かといえばトラックパッドでスワイプが使えること。環境設定のトラックパッドで動作を設定できる。

Safari などのブラウザで左右にスワイプすると過去のページへ行ったり来たりできるし、Xcodeだと上下のスワイプでヘッダ(*.h)と実装(*.m)ファイルを切り替えることができて非常に便利。ただ2本指のスクロールと違い、スワイプはアプリ側で対応している必要がある。

スワイプは 10.6 から導入された NSResponder の新しいメソッド -swipeWithEvent: を追加するだけで簡単に使うことができる。
NSResponder Class Reference

このメソッドを NSWindow もしくは NSView のサブクラスで実装しておくと、スワイプ発生時に呼び出される。
- (void)swipeWithEvent:(NSEvent *)event
{
    if ([event type] == NSEventTypeSwipe) {  // ※これは不要かもしれない
        // スワイプされた時の処理
    }
}
スワイプの方向は引数で渡される NSEvent の値 deltaX と deltaY で判断できる。上方向へスワイプした場合には deltaY == -1.0 となる。絶対値は常に 1.0のようだ。以下は NSEvent の例。
NSEvent: type=Swipe loc=(325,153) time=35110.6
 flags=0x100 win=0x1436e0 winNum=5070 ctxt=0x214cf
 deltaX=-1.000000 deltaY=0.000000
なおスワイプは 10.6から導入されたイベントなので 10.5互換で開発している場合、NSEventTypeSwipe は定義が無い指摘されてコンパイルエラーとなる。この場合は自分で定義しておく。
#ifndef NSEventTypeSwipe
#define NSEventTypeSwipe 31
#endif

Responses

Leave a Response

人気の投稿(過去 30日間)