iPhoneアプリ開発 - touchesBeganとUITapGestureRecognizerの差(タッチとタップ) –
ぐぐるとよく出てくるのが、以下の2つ
- UIViewControllerのtouchesBeganを使う
- UITapGestureRecognizerを使う
この2つのどっちを使えば良いのか。
そもそも何が違うんだろうというのが疑問でした。
とりあえず2つの使い方
touchesBegan
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //タッチされた場所 UITouch *touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:self.view]; }
上記の書き方で、どこかしらにタッチしたら位置が取得できます。
UITapGestureRecognizer
//まず最初に以下を宣言しとく UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)]; self.view.userInteractionEnabled = YES; [self.view addGestureRecognizer:tapGesture]; //略 -(void)tap:(id)sender { CGPoint tapPoint = [sender locationInView:self.view]; }
最初に宣言を書いてから、対応する関数を書いておけば呼び出されるので位置が取得できます。
違い
そもそもタッチとタップって?って話。
- 指を画面にタッチ→touchesBegan
- 指を画面から離す→tap
となる。
呼ばれるタイミングが違うみたい。
なので、例えばドラッグ用の「UIPanGestureRecognizer」を使う場合、
- 指を画面にタッチしたまま移動
が、ドラッグになるのでtouchesBeganは呼ばれるけど、tapは呼ばれない。
したがって、
「線を書きたい」という行為をする場合は、線を書く始点を判断するためにtouchesBeganを使わないとダメみたい。
※UIPanGestureRecognizerで分かるのはドラッグ開始地点からの移動した座標のため。
画面にある画像を移動させたいなら、UIPanGestureRecognizerのみで大丈夫。
広告
関連記事
-
iPhoneアプリ開発 -mixiSDKを使ってmixi連携をしてみる(1)-
* やりたいこと iPhoneアプリでmixiと連携し、mixiボイスなどに文字を投稿する。 ※
-
Jenkins + DeployGate(2) -DeployGateにアプリをアップ!-
DeployGateを使ってますか? 継続的にDeployってますか? TestFlightの
-
iPhoneアプリ開発 -利用するべきサービス-
iPhone(iOS)アプリ開発において使っているサービスを列挙。 この手のサービスがないと、開発中
-
MacでRuby on Railsの開発環境構築 -Apacheで動かす-
* 環境 -MacBook Air MD231J/A -Mac OS X バージョン10.8.2
-
Jenkins + DeployGate(1) -DeployGateでAndroidアプリ開発-
TestFlight for Androidが発表されて1ヶ月ぐらいたちますが、音沙汰がありません。
-
Jenkins + iPhoneアプリ(番外1) -TestFlightを利用する-
* これまで - -- 執事(Jenkins)を雇いました。 * やりたいこと Jenk
-
Selenium2.0でUIテスト(2) -Rubyでやってみよう-
前回は、Selenium + PHPを試しました。 今後はRubyでやってみようということでSele
-
CakePHP2系でTwigを利用 -書き方のメモ-
CakePHP2系でTwigをどのように記述するかのメモ。 数パターンしか載せてないですが、だいた
-
研究室での進捗報告の方法について、ふと思ったこと
* 以下に加筆・修正して移動しました。
-
iPhoneアプリ開発 −複数前の画面に戻る−
* やりたいこと ある画面から別の画面に遷移したい。 -1つ前の画面に戻りたい。 -2つ前の画面に戻