ページ 11

objective-c マルチタッチの座標を検出しそれぞれ別のテキストフィールドに表示させたい

Posted: 2010年12月13日(月) 17:06
by YT
開発環境<Mac OS X, iOS SDK 4.2>
開発暦<3ヶ月ほど>

これで2度目の投稿になります。
現在、「iPadに触れた数本の指の位置情報を、wi-fiを使いPC側へ送信し、PCのプログラムを動作させられる」という
PCプログラムのコントローラーとなるようなアプリケーションの開発に着手しております。
前回質問した投稿で回答を頂き、UITouchを用いて位置情報を取得する事ができる事ができました。

現在、view上のテキストフィールドに、同viewをタッチした指のある座標を表示させています。

しかしマルチタッチとなると話が別なようで、エラーが起きてしまいます。
1本目の指はテキストフィールド1、2本目はテキストフィールド2、といったように
それぞれの指の位置情報を指毎に用意したテキストフィールドに表示させたいのですが、単純に今できている記述の変数名などを変えて追加しても、ビルドすると途中で止まってしまいうまくいきません。

非常に初歩的なミスを行っているのかと思いますが、ご教示していただけたら幸いです。
よろしくお願いします。

下記が主にタッチ情報の取得を行っている部分になります。

コード:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
	
	NSSet *allTouches = [event allTouches];			// タッチの取得
		
	UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
	UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1];
	
	// Retrieve touch point
	CGPoint pt = [touch locationInView: touch.view];
	CGPoint pt2 = [touch2 locationInView: touch2.view];
	
	NSString *taps = [[NSString alloc] 
					  initWithFormat: @"%d <%4.0f, %4.0f>  ",  pt.x, pt.y];
	NSString *taps2 = [[NSString alloc] 
					  initWithFormat: @"<%4.0f, %4.0f>  ", pt.x, pt.y];
	
	printf("point = %lf,%lf\n", pt.x, pt.y);
	
	[XLabel setText: taps]; //こちらがテキストフィールド1
	[YLabel setText: taps2]; // こちらがテキストフィールド2になります
	[taps release];
	[taps2 release];

}

Re: objective-c マルチタッチの座標を検出しそれぞれ別のテキストフィールドに表示させたい

Posted: 2010年12月14日(火) 01:33
by Justy
YT さんが書きました:ビルドすると途中で止まってしまいうまくいきません。
 ビルドが途中で止まるというのはビルド中にエラーがおきてコンパイル出来ないということですか?

 とりあえず、[event allTouches] で取得した NSSet*のオブジェクトは、中に複数の UITouchが
入っている可能性がありますので、範囲を超えて objectAtIndexで取り出すことは出来ません。

 for (UITouch *touch in touches) { } な形でとりだすか、[allTouches count]で数を調べてアクセス範囲を
限定して objectAtIndexでアクセスしてみて下さい。