私はシングルタップジェスチャーレコグナイザーを追加したUIScrollView
を使用して、いくつかのUIオーバーレイを表示/非表示にします:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[scrollView addGestureRecognizer:singleTap];
そして:
- (void)handleTap:(UITapGestureRecognizer *)sender {
// report click to UI changer
}
UIScrollView
の下部に 簡単なテーブルビュー を追加しました。すべてが正しく機能します(水平および垂直の両方にスクロールします)が、問題はタップがジェスチャレコグナイザー(上記)のみによって認識され、簡単なテーブルビューでは認識されないことです。ジェスチャリスナーを登録する行を削除すると、すべてが正常に動作し、テーブルビューはタップ自体に気付きます。
これは、ジェスチャー認識機能がテーブルビューのタップイベントを「食べ」、下に伝播しないかのようです。
どんな助けでも大歓迎です
これで問題が解決するはずです。
IScrollViewおよびUIViewのコンポーネント[UIScrollView内に配置]でタッチイベントを検出
アイデアは、タッチイベントを飲み込まないようにジェスチャレコグナイザーに伝えることです。これを行うには、singleTapのcancelsTouchesInView
プロパティをNO
(デフォルトではYES
)に設定する必要があります。
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
singleTap.cancelsTouchesInView = NO;
[scrollView addGestureRecognizer:singleTap];
Swift 3.
let singleTap = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
singleTap.cancelsTouchesInView = false
singleTap.numberOfTapsRequired = 1
scrollView.addGestureRecognizer(singleTap)
セレクターメソッドは次のようになります。
@objc func handleTap(_ recognizer: UITapGestureRecognizer) {
// Perform operation
}
その理由はUser Interaction Enabled
は、UIImageViewではfalse
に設定されます。タップを有効にするにはtrueに設定する必要があります
タッチに含める/除外するオブジェクトを設定できます。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldReceiveTouch:(UITouch *)touch {
if (touch.view == [self view]) {
return YES;
}
return NO;
}
ありがとう@zambrey
Swift 2.2+バージョン:
scrollView.delegate = self
let allowMultipleTouches = UITapGestureRecognizer(target: self, action: #selector(genderPressed))
allowMultipleTouches.numberOfTapsRequired = 1
allowMultipleTouches.cancelsTouchesInView = false
scrollView.addGestureRecognizer(allowMultipleTouches)
スクロールビューがストーリーボードにある場合、View Controllerでアウトレットを固定することを忘れないでください。この例では、scrollView
はUIScrollView
のアウトレットです。
これはSwift 3/Xcode 8で機能しました
self.scrollView.touchesShouldCancel(in: ** the view you want the touches in **)
self.scrollView.canCancelContentTouches = false
がんばろう!
UIscrollViewであらゆる種類のジェスチャをキャプチャできます。 cancelsTouchesInViewプロパティをfalseに設定するように、デフォルトプロパティの一部も処理することを確認してください。これはデフォルトでtrueです。また、セレクターで区別するためにサブビューにいくつかのタグ番号を付けます。また、ユーザーインタラクションをtrueにできます。
let tap = UITapGestureRecognizer(target:self、action:
selector(didTapByUser(_ :)))
TapGesturesは私のために働いた。一方、スワイプでは、スクロールを無効にする必要があり、機能しました。
swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: #selector(swipeToNewImage(_:)))
swipeLeftGesture.direction = .left
scrollView.addGestureRecognizer(swipeLeftGesture)
swipeRightGesture = UISwipeGestureRecognizer(target: self, action: #selector(swipeToNewImage(_:)))
scrollView.addGestureRecognizer(swipeRightGesture)
scrollView.isScrollEnabled = false