如何使用UIScrollView滚动并具有手势识别器?

Phi*_*lip 19 objective-c uiscrollview uiview ios

我在UIScrollView上有一个手势识别器,但它几乎不会被调用,因为UIScrollView会吃掉所有手势.

我用这一行部分解决了这个问题:[scrollView.panGestureRecognizer requireGestureRecognizerToFail:rightSwipe];然而,这一行导致我的识别器总是被接受(所需的行为)并且滚动视图不滚动.

也就是说,滚动时,识别器被接受但视图不会滚动.

我该如何解决这个问题,还是有替代解决方案?

谢谢!

War*_*shi 19

创建一个子类UIScrollView.在新的子类中添加此方法

- (BOOL)gestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UISwipeGestureRecognizer *)otherGestureRecognizer 
{
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

将scrollView类设置为新的scrollview子类.


abe*_*73t 9

对我有用的方式是子类UIScrollView并符合UIGestureRecognizerDelegate该子类中的 。然后调用这个方法。

class ATScrollView: UIScrollView, UIGestureRecognizerDelegate { 
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
                           shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    } 
}
Run Code Online (Sandbox Code Playgroud)


Mer*_*man 8

不要忘记为您的手势识别器机制分配适当的委托:

因此,例如:

设置.up方向手势识别器

let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(self.handleGesture(gesture:)))
        swipeUp.direction = .up
        swipeUp.delegate = self // set delegate
        self.addGestureRecognizer(swipeUp)
Run Code Online (Sandbox Code Playgroud)

设置.down方向手势识别器

let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.handleGesture(gesture:)))
        swipeDown.direction = .down
        swipeDown.delegate = self // set delegate
        self.addGestureRecognizer(swipeDown)
Run Code Online (Sandbox Code Playgroud)

也不要忘记遵守委托:

YourViewController: UIGestureRecognizerDelegate
Run Code Online (Sandbox Code Playgroud)

设置同时识别:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
Run Code Online (Sandbox Code Playgroud)

然后继续你的逻辑......

希望能帮助到你!