UIScrollViewの使い方(座標表示編)

このエントリーを含むはてなブックマークはてなブックマーク - UIScrollViewの使い方(座標表示編)

前回(UIScrollViewの使い方(拡大縮小編))までの説明で、画像のスクロールと拡大縮小を行うことが出来るようになりました。今回は、iPhoneの画面がタップされた時にその座標を表示するプログラムを作ってみたいと思います。

こう書くと簡単そうなのですが、
意外や意外、これが結構めんどくさいのです。

もう一度UIScrollView その1で使った絵を
もう少し、正確に書いたものを書いてみます。
UIScrollView8

基本的には、ユーザのタッチイベントを取得するのは一番下側のViewで行うのですが、この図からもわかるように上側にScrollViewがのっかってしまっているためにタッチイベントがこれに邪魔されて一番下側のViewにまで降りてこないのです。そこで、タッチイベントがScrollViewを透過してくるように設定します。

この設定は簡単で次の一行をviewDidLoad関数の中に記述するだけです。

scrollView.userInteractionEnabled = NO;	

IBでも同様の設定項目があるので、こちらで設定してもOKです。

UIScrollView9

ようは、scrollViewは画面がタッチされても無視しますよ~、と宣言しているだけです。

さて、これで下側のViewがタッチイベントが取得できるようになりました。タッチイベントを取得するにはtouchesBegan:withEventコールバックを使います。この関数の中で、タッチされた座標の配列から1つを取り出しscrollViewにおける座標系に変換して、touchPosに代入して表示ています。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
	UITouch *touch = [touches anyObject];
	CGPoint touchPos = [touch locationInView:scrollView];
	NSLog(@"%f, %f", touchPos.x, touchPos.y);
}

これで準備は整いました。早速コンパイル&実行してみましょう。iPhoneの画面上をタップするごとに、コンソールに座標が表示されれば成功です。

と。ここまでは良かったのですが、問題発生です。
なんと!スクロールができなくなってしまったのです。。
ScrollViewのユーザインタラクションをOFFにしたのですから、
当たり前っちゃぁ、当たり前なんですけどねぇ。

ここまでのプロジェクトをココに置いておきます。
scroll3.zip

次回はこの問題を解決します。
UIScrollViewの使い方(2本指でスクロール編)

2 Responses to “UIScrollViewの使い方(座標表示編)”

  1. [...] iPhoneアプリと、そのプログラム iPhoneアプリを作る際に役立つプログラムを置いています コンテンツへ移動 ホーム紹介 ← UIScrollViewの使い方 その4(座標表示編) [...]

  2. [...] iPhoneアプリと、そのプログラム iPhoneアプリを作る際に役立つプログラムを置いています コンテンツへ移動 ホーム紹介 ← UIScrollViewの使い方 (スクロール編2) UIScrollViewの使い方(座標表示編) → [...]

Leave a Reply

You must be logged in to post a comment.