2011-10-27 18 views
6

可能性の重複:
UIScrollview getting touch eventsiPhone - UIScrollViewの...タッチの座標を検出

それはUIScrollViewの中に指が触れた場所を検出することは可能ですか?

つまり、タップやスクロール、指を持ち上げたり、タップしたりスクロールしたりするなど、ユーザーが指を使っているとします。タップが自己に対して発生したCGPointを知ることは可能ですか?スクロールが表示されていますか? scrollerはself.view全体を占有します。

ありがとうございました。

答えて

12

あなたは、ジェスチャ認識装置でそれを行うことができます。以下のための単一のタップ位置はあなたがビュー内の場所を見つけ、それにスクロールの位置を変えを追加することができます

+0

タップしてスクロールしないと、tapActionが起動されます。私が好きなら、タップ、スクロール、指を持ち上げたり、タップしたり、スクロールしたり、指を持ち上げたりするなど、タップは検出されません。スクロールが大きなスワイプの後にスクロールしている場合も、タップは検出されません。スクロールバーは静止していなければならず、1つのドライタップを作成しなければなりません。 – SpaceDog

+1

他の多くのジェスチャー認識 - UIPanGestureRecognizer、UIPinchGestureRecognizer、UISwipeGestureRecognizer、UIRotationGestureRecognizerがあります。さらに、カスタムレコグナイザを作成して、非常に複雑なタッチを検出することもできます。私はシンプルなタッチでより一般的な例を与えました。 – beryllium

+0

@RubberDuckあなたはこれを理解しましたか?私は同じボートに乗っています...私はUICollectionViewで作業しています。指のタッチがセルビュー上にあるかどうかを検出したい場合は –

0
+0

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

0

UIViewクラスでconvertPoint:toView:メソッドを使用することができますself.viewすることtapPointを変換するには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]; 
} 

を使用して検出します。次の問題は、イベントがスクロールビューに送信されるため、-(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

nope。 touchesBeganはタップしてスクロールしないとトリガーされます。私が好きなら、タップ、スクロール、指を持ち上げたり、タップしたり、スクロールしたり、指を持ち上げたりするなど、タップは検出されません。スクロールが大きなスワイプの後にスクロールしている場合も、タップは検出されません。スクロールバーは静止していなければならず、1つのドライタップを作成しなければなりません。それはそう簡単ではありません。 – SpaceDog

関連する問題