忍者ブログ
  • 2024.10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 2024.12
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/11/23 00:38 】 |
タッチ点の取得の方法
iPhoneでタッチ点を取得する関数は

- (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)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
{
for (id touch in touches) {
CGPoint p = [touch locationInView:self.view];
}
}

touches にその呼び出し間隔内にタッチされた点全部が入っている。
ここには書いていないが、touches は UITouch 型変数の配列。

UITouchから直接座標を求めることはできなくて、座標系つまりビューかウィンドウを渡すと、そのビュー内座標・ウィンドウ内座標に変換して取得できる。
locationInView メソッドにビューかウィンドウを渡す。
(ウィンドウクラスはビュークラスの子クラス。)

基本的には、上に書いたように、viewControllerクラスのビューを渡せばいい。
ビュー内座標で受け取れる。ビューが画面と一致しているとは限らないので注意が必要だが、画面が回転していてもちゃんとそのときの向きの左上点を原点とした座標で返してくれるから便利。

ウィンドウを渡すか、nilを渡すと、デバイスでの座標で取得することになる。
例えば以下のような感じ。
CGPoint p = [touch locationInView: ((UITouch*)touch).window];
これはデバイスを縦持ちしたときの左上点を原点とした座標系。デバイスを横持ちしても上限反転しても、あくまでデバイスの座標系で返すことになる。だから、横持ちするアプリとか、回転できるアプリだと使いにくい。


PR
【2011/08/10 16:45 】 | iPhone | 有り難いご意見(0) | トラックバック()
<<アクションのいい感じのキャラ移動を作る | ホーム | デバイスの向きを指定する>>
有り難いご意見
貴重なご意見の投稿














虎カムバック
トラックバックURL

<<前ページ | ホーム | 次ページ>>