ユーザーがドラッグを開始したときに、UIScrollView で (最初の) タッチ位置を検出したいと思います。私はこの問題をグーグルで検索しましたが、多くの人がこの問題に苦労しているようです。Apple がユーザーにスクロール ビューでのタッチ情報へのアクセスを許可しない理由については、まだ頭を悩ませることはできませんが、自分で解決策を見つけずにはいられません。しかし、私の試みはすべて失敗したので、あなたに尋ねたいと思います。
これが私がうまくいくと思ったものです:
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;
/****
?????
*****/
}
コメントで示されているように、ポイントを取得した後にパンジェスチャを無効にしてから、レコグナイザーを無効にし(まだドラッグしている間!)、スクロールビューにタッチを「渡し」て、ユーザーが正常にスクロールできるようにします。それはまったく実現可能ですか?それに対する他の解決策はありますか?