我在UIScrollView上有一个手势识别器,但它几乎不会被调用,因为UIScrollView会吃掉所有手势。
我用这一行部分解决了这个问题:[scrollView.panGestureRecognizer requireGestureRecognizerToFail:rightSwipe];
但是,这一行导致我的识别器始终被接受(所需行为)并且滚动视图不滚动。
也就是说,滚动时,会接受识别器,但视图不会滚动。
我如何解决这个问题,还是有其他解决方案?
谢谢!
答案 0 :(得分:17)
创建UIScrollView
的子类。在新的子类中添加此方法
- (BOOL)gestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UISwipeGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
将scrollView类设置为新的scrollview子类。
答案 1 :(得分:3)
不要忘记为您的手势识别器机制分配适当的授权:
所以,例如:
设置.up
方向手势识别器
let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(self.handleGesture(gesture:)))
swipeUp.direction = .up
swipeUp.delegate = self // set delegate
self.addGestureRecognizer(swipeUp)
设置.down
方向手势识别器
let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.handleGesture(gesture:)))
swipeDown.direction = .down
swipeDown.delegate = self // set delegate
self.addGestureRecognizer(swipeDown)
也不要忘记遵守代表团:
YourViewController: UIGestureRecognizerDelegate
设置同时识别:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
然后继续你的逻辑......
希望它有所帮助!
答案 2 :(得分:2)
对我有效的方法是子类UIScrollView
,并符合该子类中的UIGestureRecognizerDelegate
。然后调用该方法。
class ATScrollView: UIScrollView, UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
}
答案 3 :(得分:1)
Swift方法,
需要将UIGestureRecognizerDelegate添加到您的班级:
class ViewController: UIViewController, UIGestureRecognizerDelegate {
需要将其委托设置为self:
override func viewDidLoad() {
super.viewDidLoad()
var scrollView = UIScrollView(frame: self.view.frame)
scrollView.delegate = self
}
将您的课程方法中的此部分添加到活动的同步手势中:
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
答案 4 :(得分:0)
请原谅我这个切线,但我将发布此答案,以防其他人做出与我相同的误诊。如果像我一样上述解决方案对您不起作用,请确保您没有尝试将UISwipeGestureRecognizer附加到多个视图。它只能使用一个视图,而该视图将是它最近附加的视图!