処理方針
まず、マルチタップを行える状態にします。UIViewが持っているプロパティのmultipleTouchEnabledをYESにすることでマルチタップが行えるようになります。このプロパティはデフォルトではNOとなっています。
次に、touchesBeganのメソッド引数であるtouchesから複数のタッチを検出します。Objective-Cでは列挙子と呼ばれる仕組みが使えるようなので、それを利用してタッチ情報を順番に取得します。
プログラム
iPhoneでのタッチやタップをtouchesBeganで検知するで作成したBaseWindowクラスにinitWithFrameメソッドを追加し、UIWindow(UIViewのサブクラス)のインスタンスが作成されるタイミングでYESにするようにしました。また、touchesBeganを修正し、タッチされた数とタッチされた全ての位置をログに出力するようにしました。
BaseWindow.m
- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self != nil) { self.multipleTouchEnabled = YES; } return self; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSInteger touchCount = [touches count]; NSLog(@"touchesBegan: count = %d", touchCount); NSEnumerator *enumulator = [touches objectEnumerator]; UITouch *touchObject; while (touchObject = [enumulator nextObject]) { CGPoint tmpLocation = [touchObject locationInView:self]; NSLog(@"touchesBegan: (x, y) = (%.0f, %.0f)", tmpLocation.x, tmpLocation.y); } }
実行結果
iPhoneシミュレータでのマルチタッチは、シミュレータ画面上で[option]キーを押したままにすることでできます。カーソルが2つ現れるので、動かすことでピンチイン、ピンチアウト等ができます。マルチタッチの実行結果は次のとおりでした。
2012-07-30 00:39:44.320 HelloWorld[13321:f803] touchesBegan: count = 2 2012-07-30 00:39:44.324 HelloWorld[13321:f803] touchesBegan: (x, y) = (145, 155) 2012-07-30 00:39:44.325 HelloWorld[13321:f803] touchesBegan: (x, y) = (175, 325)