2013-06-27 13 views
10

ユーザーがドラッグを開始したときにUIScrollViewの(初期)タッチ位置を検出したいと思います。私はこの問題を探検しており、多くはこの問題に苦しんでいるようです。今、アップルがなぜスクロール表示でタッチ情報にアクセスできないのか、私はまだ頭を抱えていませんが、自分で解決策を見つけることはできません。しかし、私の試行はすべて失敗したので、私はあなたに尋ねたいと思います。ここでUIScrollViewのタッチ位置を検出しますか?

は、私が仕事だろうと思ったものです:

私はUIScrollViewのサブクラスでは、このようUIPanGestureRecognizerを設定し、そのジェスチャー認識装置に追加します。

UIPanGestureRecognizer *tapDrag = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(touchedAndDragged:)]; 
tapDrag.cancelsTouchesInView = NO; 
tapDrag.delegate = self; 
[self addGestureRecognizer:tapDrag]; 

および対応する方法:

-(void)touchedAndDragged:(UIPanGestureRecognizer*)t{ 

    CGPoint loc = [t locationInView:self]; 
    //do something with location (that is exactly what I need) 
    //... 

    //Now DISABLE and forward touches to scroll view, so that it scrolls normally 
    t.enabled = NO; 
    /**** 
    ????? 
    *****/ 

} 

コメントで示されているように、私はポイントを持ってからパンジェスチャーを無効にしてから、認識ツールを無効にします(まだドラッグしている間に!)。ユーザがスクロールすることができるように、スクロールビューにタッチを「渡す」。それは実現可能ですか?他の解決策はありますか?

答えて

31

まあ、UIScrollViewには、すでにタップできるパンジェスチャーが組み込まれています。スクロールビューのデリゲートとしてスクロールビューのデリゲート(scrollViewWillBeginDraggingを利用する)を設定し、UIPanGestureRecognizerの-locationInView:を使用してタッチ位置を決定するだけで簡単に使用できます。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    CGPoint location = [scrollView.panGestureRecognizer locationInView:scrollView]; 
    NSLog(@"%@",NSStringFromCGPoint(location)); 
} 
+0

このスクロールがいくつかのxx位置にあるかどうかを検出することは可能ですか?scrollViewスクロールまたはタッチはトリガーされませんか?私は2つのビュー、地図とスクロールビューの下の地図を持っていると言う私は地図と地図がタッチを取得する必要があります私はその代理人を発射するスクロールビューをしたくない –

0

なぜ、より便利で効率的な-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)eventの開始位置を取得しないのですか。

+3

私はタッチ関数を十分に認識していますが、実際には実装しようとしましたが、まったく呼び出されません。 –

+0

ユーザー対話が有効になっていません。しかし、それを無効にしてください。しかし、あなたはその子オブジェクトのどれかとやりとりすることはできません... – Philip

関連する問題