iOS SDKメモ UITapGestureRecognizerを使ってタップしたことを検知してみる

UIViewを継承したビュー上でしか動作しないみたいなんだけど、
UITapGestureRecognizerクラスを使うと結構簡単にタップのジェスチャーを検知できるようになるみたい。

手順としては、こんな感じ。

  1. UIViewを継承したビュークラスでUITapGestureRecognizerクラスのオブジェクトを生成
    ※こんとき、引数に呼びたいアクションメソッド名を書く
  2. UIViewのaddGestureRecognizerでさっきのオブジェクトを追加
  3. アクションメソッドを実装する

コードとしてはこんな感じのものを書いてみた。

まずはUIViewのinitWithFrameはこんな感じ。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
- (id)initWithFrame:(CGRect)frame
{
// UIViewの初期化
self = [super initWithFrame:frame];
if (nil == self)
{
NSLog(@"initWithFrame is faild.");
return nil;
}
// UIViewの背景をオレンジに変更
self.backgroundColor = [UIColor orangeColor];
// UITapGestureRecognizerの初期化
UITapGestureRecognizer* gestureTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gestureTap:)] autorelease];
if (nil == gestureTap)
{
NSLog(@"gestureTap is faild...");
return nil;
}
// UIViewにUIGestureRecognizerを追加
[self addGestureRecognizer:gestureTap];
// return
return self;
}
- (id)initWithFrame:(CGRect)frame { // UIViewの初期化 self = [super initWithFrame:frame]; if (nil == self) { NSLog(@"initWithFrame is faild."); return nil; } // UIViewの背景をオレンジに変更 self.backgroundColor = [UIColor orangeColor]; // UITapGestureRecognizerの初期化 UITapGestureRecognizer* gestureTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gestureTap:)] autorelease]; if (nil == gestureTap) { NSLog(@"gestureTap is faild..."); return nil; } // UIViewにUIGestureRecognizerを追加 [self addGestureRecognizer:gestureTap]; // return return self; }
- (id)initWithFrame:(CGRect)frame
{
	// UIViewの初期化
	self = [super initWithFrame:frame];
	if (nil == self)
	{
		NSLog(@"initWithFrame is faild.");
		return nil;
	}
	// UIViewの背景をオレンジに変更
	self.backgroundColor = [UIColor orangeColor];
	// UITapGestureRecognizerの初期化
	UITapGestureRecognizer* gestureTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gestureTap:)] autorelease];
	if (nil == gestureTap)
	{
		NSLog(@"gestureTap is faild...");
		return nil;
	}
	// UIViewにUIGestureRecognizerを追加
	[self addGestureRecognizer:gestureTap];
	// return
	return self;
}

んで、次はタップしたときに呼ぶアクションメソッドはこんな感じ。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
- (void)gestureTap:(id)sender
{
NSLog(@"tap!!");
}
- (void)gestureTap:(id)sender { NSLog(@"tap!!"); }
- (void)gestureTap:(id)sender
{
	NSLog(@"tap!!");
}

結果はこんな感じ。
iPhoneシミュレータで、オレンジになってるとこをドコでもいいのでタップ(マウスでクリックね)してみる。

デバッガコンソールでこんな感じでタップを検知していることを確認できる。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[Session started at 2010-10-31 08:45:19 +0900.]
2010-10-31 08:45:26.137 ColorGestureMixer[25755:207] tap!!
2010-10-31 08:45:26.732 ColorGestureMixer[25755:207] tap!!
2010-10-31 08:45:27.137 ColorGestureMixer[25755:207] tap!!
[Session started at 2010-10-31 08:45:19 +0900.] 2010-10-31 08:45:26.137 ColorGestureMixer[25755:207] tap!! 2010-10-31 08:45:26.732 ColorGestureMixer[25755:207] tap!! 2010-10-31 08:45:27.137 ColorGestureMixer[25755:207] tap!!
[Session started at 2010-10-31 08:45:19 +0900.]
2010-10-31 08:45:26.137 ColorGestureMixer[25755:207] tap!!
2010-10-31 08:45:26.732 ColorGestureMixer[25755:207] tap!!
2010-10-31 08:45:27.137 ColorGestureMixer[25755:207] tap!!

ちなみに、UITapGestureRecognizerクラスの仲間でスワイプやスクロールができるクラスもあるんだけど、追々試してみようかなっと。

んまま、そんだけ。