強火で進め

このブログではプログラム関連の記事を中心に書いてます。

MacBookやMacBook Airなどのピンチやスワイプのマルチタッチのプログラム方法

MacBookMacBook Airトラックパッドでのピンチやスワイプを取得する方法の解説です。

こちらは以下のバージョンの自作メタセコイアビューアに「こんな機能はどう?」と提案を貰ったときに合わせて教えて貰ったサイト(こちら)を元に色々と調べて実装しました。

Macメタセコイアビューアを作ってみた(Ver 1.2) - 強火で進め
http://d.hatena.ne.jp/nakamura001/20091226/1261844528

※実装例はこちらのビューアのソースコードを参照下さい。

実装は至って簡単で以下の様なメソッドをViewで定義する事でジェスチャのイベントが取得できます。

// Pinch(ピンチ)のジェスチャ
-(void)magnifyWithEvent:(NSEvent *)anEvent {
    NSLog(@"magnify %f", [anEvent deltaZ]);
}
// 回転のジェスチャ
-(void)rotateWithEvent:(NSEvent *)anEvent {
    NSLog(@"rotate %f", [anEvent rotation]);
}
// 3本指でのスワイプのジェスチャ
-(void)swipeWithEvent:(NSEvent *)anEvent {
    NSLog(@"swipe %f %f", [anEvent deltaX], [anEvent deltaY]);
}

なお、 magnifyWithEvent と rotateWithEvent については普通にfloat(CGFloat)の範囲での値がデータとして来るのですが swipeWithEvent については -1, 0, 1 のいずれかの値となる事に注意する必要があります。

Pinch(ピンチ)時の取得データは以下になります。

2009-12-29 02:26:49.206 MqoViewer[29323:10b] magnify 3.997803
2009-12-29 02:26:49.215 MqoViewer[29323:10b] magnify 1.998901
2009-12-29 02:26:49.224 MqoViewer[29323:10b] magnify 2.998352
2009-12-29 02:26:49.234 MqoViewer[29323:10b] magnify 0.999451
2009-12-29 02:26:49.249 MqoViewer[29323:10b] magnify 2.998352
2009-12-29 02:26:49.259 MqoViewer[29323:10b] magnify 0.999451
2009-12-29 02:26:49.430 MqoViewer[29323:10b] magnify -0.999451
2009-12-29 02:26:49.439 MqoViewer[29323:10b] magnify -0.999451
2009-12-29 02:26:49.447 MqoViewer[29323:10b] magnify -2.998352
2009-12-29 02:26:49.456 MqoViewer[29323:10b] magnify -3.997803
2009-12-29 02:26:49.465 MqoViewer[29323:10b] magnify -3.997803

スワイプ時の取得データは以下になります。

2009-12-29 01:47:34.863 MqoViewer[29161:10b] swipe 1.000000 0.000000
2009-12-29 01:47:42.681 MqoViewer[29161:10b] swipe 0.000000 -1.000000
2009-12-29 01:47:43.850 MqoViewer[29161:10b] swipe -1.000000 0.000000
2009-12-29 01:47:44.611 MqoViewer[29161:10b] swipe 1.000000 0.000000
2009-12-29 01:47:45.541 MqoViewer[29161:10b] swipe -1.000000 0.000000
2009-12-29 01:47:46.684 MqoViewer[29161:10b] swipe 0.000000 -1.000000