私のアプリにはテーブルビュー(もちろんスクロールインあり)があり、このビューはジェスチャーレコグナイザー(Facebookアプリのように)でスライドしてオンとオフを切り替えます。
ボタンを使用して[テーブルビューを画面に]スライドさせると正常に機能しますが、ジェスチャレコグナイザーを使用すると、テーブルビューをスクロールできなくなります。
問題のあるジェスチャレコグナイザーのコードは次のとおりです。
[self.view addGestureRecognizer:self.slidingViewController.panGesture];
誰かがアイデアを持っていますか?
デフォルトでは一度に1つのジェスチャしか認識できないため、ジェスチャによってスクロールビュージェスチャが機能しなくなっている可能性があります。ジェスチャーのデリゲートとして自分を追加し、実装してみてください。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
self.slidingViewController.panGesture.delegate = self;
また、実装するプロトコルのリストに<UIGestureRecognizerDelegate>
を追加します
UItableviewでパンジェスチャを使用しましたが、このジェスチャを回避するために、デリゲートの下で使用しました。
//This method helped me stopped up/down pangesture of UITableviewCell and allow only vertical scroll
override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool {
if let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer {
let translation = panGestureRecognizer.translationInView(superview)
if fabs(translation.x) > fabs(translation.y) {
return true
}
return false
}
return false
}
これがSwiftバージョン:
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
テーブルビューで長押しジェスチャを定義し、長押しするとテーブルをスクロールできないという同じ問題がありました。
修正者:
1- UIGestureRecognizerDelegate
を追加します
2- gesture.delegate = self (after you defined the long press gesture)
を追加します
3-この関数の追加:
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {return true}
正しければ、ジェスチャレコグナイザーを追加するビューはテーブルビューです。デフォルトでは、UIScrollView
(および暗黙的にUITableView
)クラスはスクロールにパンジェスチャレコグナイザーを使用し、ジェスチャレコグナイザーはそれを妨害します。テーブルビューのコンテナとして別のビューを使用していて、それにパンジェスチャレコグナイザーを追加している場合は、機能するはずです。