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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
YT

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

#1

投稿記事 by YT » 10年前

開発環境<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];

}

アバター
Justy
副管理人
記事: 122
登録日時: 10年前
住所: 神奈川県

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

#2

投稿記事 by Justy » 10年前

YT さんが書きました:ビルドすると途中で止まってしまいうまくいきません。
 ビルドが途中で止まるというのはビルド中にエラーがおきてコンパイル出来ないということですか?

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る