iPhone - UIScrollView ...タッチの座標を検出する

Possible Duplicate:
UIScrollview getting touch events

指がタッチされた場所をUIScrollViewで検出することは可能ですか?

つまり、ユーザーが指をこのように使用するとします。タップとスクロールは、指を持ち上げてタップし、スクロールするなどです。タップがself.viewと関連して発生したCGPointを知ることは可能ですか?に? scrollerはself.view全体を占有します。

ありがとう。

6

4 答え

You can do it with gesture recognizers. For detect single tap location use UITapGestureRecognizer

UITapGestureRecognizer *tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)] autorelease];
[myScrollView addGestureRecognizer:tapRecognizer];

- (void)tapAction:(UITapGestureRecognizer*)sender{ 
    CGPoint tapPoint = [sender locationInView:myScrollView];
    CGPoint tapPointInView = [myScrollView convertPoint:tapPoint toView:self.view];
}

その tapPoint をself.viewに変換するには、 convertPoint:toView: メソッド

12
追加された
いいえ。タップしてスクロールしないと、tapActionが起動されます。私が好きなら、タップ、スクロール、指を持ち上げたり、タップしたり、スクロールしたり、指を持ち上げたりするなど、タップは検出されません。スクロールが大きなスワイプの後にスクロールしている場合も、タップは検出されません。スクロールバーは静止していなければならず、1つのドライタップを作成しなければなりません。
追加された 著者 SpaceDog,
@berylliumなぜ[送信者のlocationInView:myScrollView]を実行しないのですか?
追加された 著者 Paul Brewczynski,
UIPinGestureRecognizer、UIPinchGestureRecognizer、UISwipeGestureRecognizer、UIRotationGestureRecognizerなど、他の多くのジェスチャ認識ツールがあります。さらに、カスタムレコグナイザを作成して、非常に複雑なタッチを検出することもできます。私はシンプルなタッチでより一般的な例を与えました。
追加された 著者 beryllium,
@ RubberDuckあなたはこれを理解しましたか?私は同じボートに乗っています...私はUICollectionViewで作業しています。フィンガータッチがセルビューにあるかどうかを検出したい
追加された 著者 x.y,
私のフレームワークでは UIkit.framework を見ましたが、 UITapGestureRecognizer を見つけることはできません。私が UITapGestureRecognizer を書こうとすると、エラーが見つかりません。
追加された 著者 Adil Malik,

touchesBegan:withEvent: NSSet UITouchの、UITouchにはtouchのCGPointを返すlocationInView:メソッドが含まれています。

0
追加された
この場合、UIScrollViewをサブクラス化する必要があります
追加された 著者 beryllium,
0
追加された
それは簡単ではありません。 TouchesBeganはスクロールビューがまだ動いていてまだタッチしている場合にのみタッチを検出し、touchesBeganは何も検出しません。
追加された 著者 SpaceDog,

ビュー内の位置を見つけて、そのスクロールセットを追加することができます。次の問題は、イベントがスクロールビューに送信されるため、 - (void)touchesBegan:touches:event が呼び出されないことです。これは、UIScrollViewをサブクラス化して、スクロールビューがタッチイベントを次のレスポンダ(ビュー)に送信するように修正できます。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
   //Position of touch in view
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchPoint = [touch locationInView:self.view];

   //Scroll view offset
    CGPoint offset = scrollView.contentOffset;

   //Result
    CGPoint scrollViewPoint = CGPointMake(touchPoint.x, touchPoint.y + offset.y);
    NSLog(@"Touch position in scroll view: %f %f", scrollViewPoint.x, scrollViewPoint.y);
}
0
追加された
いいえ。 touchesBeganはタップしてスクロールしないとトリガーされます。私が好きなら、タップ、スクロール、指を持ち上げたり、タップしたり、スクロールしたり、指を持ち上げたりするなど、タップは検出されません。スクロールが大きなスワイプの後にスクロールしている場合も、タップは検出されません。スクロールバーは静止していなければならず、1つのドライタップを作成しなければなりません。それはそう簡単ではありません。
追加された 著者 SpaceDog,