19

現在、UIScrollViewを使用して、アプリに表示しているグラフのカーソル/マーカーをスクロール/ドラッグする方法として機能しています。scrollViewDidScrollなどを使用して、コンテンツオフセットの位置を検出し、この位置に基づいて画面に表示するものを操作します。

私の質問は、画面上のユーザーのシングルタップを検出して、このタップの位置を取得することも可能かどうかです(次に、contentoffsetをこの位置に設定します)。

uiscrollviewのサブクラスの作成について説明しているチュートリアルをいくつか読みましたが、これらのサブクラスはシングルタップのみを考慮し、ドラッグ/スクロールも考慮しないようです。

スクロール/ドラッグ機能を維持しながら、UIScrollViewでのユーザーのシングルタップを検出する方法について誰かが洞察を持っていますか?
前もって感謝します!

4

4 に答える 4

33

scrollViewオブジェクトには次のコードを使用します。

UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
singleTapGestureRecognizer.numberOfTapsRequired = 1;
singleTapGestureRecognizer.enabled = YES;
singleTapGestureRecognizer.cancelsTouchesInView = NO;
[scrollView addGestureRecognizer:singleTapGestureRecognizer];
//[singleTapGestureRecognizer release]; Not needed in ARC-enabled Project

}

- (void)singleTap:(UITapGestureRecognizer *)gesture {  
//handle taps   
}
于 2012-06-28T05:17:18.140 に答える
6

スウィフト5

let scrollViewTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(scrollViewTapped(_:)))
scrollViewTapGestureRecognizer.numberOfTapsRequired = 1
scrollViewTapGestureRecognizer.isEnabled = true
scrollViewTapGestureRecognizer.cancelsTouchesInView = false
scrollView.addGestureRecognizer(scrollViewTapGestureRecognizer)

@objc func scrollViewTapped(_ sender: UITapGestureRecognizer) {
    print("UIScrollView was tapped.")
}
于 2015-02-01T17:22:56.383 に答える
1

質問の最初の部分は、始めるのが非常に簡単です。UIScrollViewサブクラスがある場合は、次のようなtouchesEndedオーバーライドを追加できます。

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

    if ([touch tapCount] == 1) {

        CGPoint location = [touch locationInView:self];

        [self setContentOffset:location animated:YES];

    }


}

スクロールビューの場合、タッチの-locationInViewには、実際にはすでにContentOffsetが追加されています。このコードが行うことは、ユーザーが触れたポイントがビューの左上になるようにスクロールビューをスクロールすることです。これはおそらくあなたが望むものではないので、スクロールを10ピクセルにする場合はオフセットを追加するか、x値のみを使用して別のCGPointを作成する必要があります。スクローラーが左から右でない場合の場所。

これは、実際にスクロールを実行できることを妨げることはありません。

于 2012-06-28T02:48:24.690 に答える
0

UITapGestureRecognizerをscrollViewにアタッチすることを検討しましたか?UITapGestureRecognizerをUIScrollViewにアタッチし、タッチが必要なときに組み込みのパンを使用–gestureRecognizerShouldBegin:および/またはキャンセルしました。–gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

于 2012-06-28T01:54:33.010 に答える