第8回 iPhoneアプリ開発勉強会 マルチタッチ 鷲見政明
タッチイベント取得のための前準備 UIViewクラスを使用 NSObject UIResponder UIView メンバ変数 NSMutableArray *touchPoints // タッチしたポイントを保持する領域へのポインタ イニシャライザ self.multipleTouchEnabled = YES; // マルチタッチを許可 touchPoints = [[NSMutableArray alloc] init]; // タッチしたポイントを保持する領域を確保 class図
タッチイベント取得メソッド UIResponderクラスの以下のメソッドをオーバーライド - (void)touchesBegan(NSSet *)touches withEvent(UIEvent *)event; - (void)touchesMoved(NSSet *)touches withEvent(UIEvent *)event; - (void)touchesEnded(NSSet *)touches withEvent(UIEvent *)event; - (void)touchesCancelled(NSSet *)touches withEvent(UIEvent *)event; - (void)touchesEnded… 指が離れたとき - (void)touchesMoved… 指が動いたとき - (void)touchesCancelled… タッチ操作中に着信時などに発生 - (void)touchesBegan… 指が触れたとき
タッチイベントの取得 タッチ取得イベントの実装 ポイント情報の取得 - (void)touchesBegan(NSSet *)touches withEvent(UIEvent *)event { // タッチしたポイントを領域に格納 [touchPoints addObjectsFromArray: [touches allObjects]]; } - (void)touchesEnded(NSSet *)touches withEvent(UIEvent *)event // ポイントを領域から削除 [touchPoints removeObjectsFromArray: [touches allObjects]]; ポイント情報の取得 1つのUITouchオブジェクトが1本の指に対応 for (int i = 0; i < [touchPoints count]; i++) { UITouch *aTouch = [touchPoints objectAtIndex: i]; … }
タッチイベントの取得 タッチ取得イベントの実装 - (void)touchesMoved (NSSet *)touches withEvent(UIEvent *)event { // 列挙体に変換 NSEnumerator *touchEnm = [touches objectEnumerator]; UITouch *aTouch; // 指の数分情報を取得 while ( aTouch = [touchEnm nextObject] ) { int index = [touchPoints indexOfObject: aTouch]; … } }
iPhone simulatorでのデバッグ マルチタッチのシミュレーションを行うことが可能 ※ option + マウス操作 ※ 3つ以上のタッチを試す場合には実機が必要
おわりに 本日の内容 マルチタッチ Next Work GPS