ios - UIPanGestureRecognizer - 仅垂直或水平

标签 ios uigesturerecognizer

我有一个 View ,它有一个 UIPanGestureRecognizer 可以垂直拖动 View 。所以在识别器回调中,我只更新 y 坐标来移动它。此 View 的父 View 有一个 UIPanGestureRecognizer,它将水平拖动 View ,仅更新 x 坐标。

问题是第一个 UIPanGestureRecognizer 正在获取垂直移动 View 的事件,所以我不能使用 superview 手势。

我试过了

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
 shouldRecognizeSimultaneouslyWithGestureRecognizer:
                            (UIGestureRecognizer *)otherGestureRecognizer;

两者都可以,但我不想要那样。我希望仅当运动明显水平时才检测到水平。因此,如果 UIPanGestureRecognizer 具有方向属性,那就太好了。

我怎样才能实现这种行为?我发现文档非常困惑,所以也许有人可以在这里更好地解释它。

最佳答案

只需为垂直平移手势识别器执行此操作,它对我有用:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)panGestureRecognizer {
    CGPoint velocity = [panGestureRecognizer velocityInView:someView];
    return fabs(velocity.y) > fabs(velocity.x);
}

对于 Swift:

func gestureRecognizerShouldBegin(_ gestureRecognizer: UIPanGestureRecognizer) -> Bool {
    let velocity = gestureRecognizer.velocity(in: someView)
    return abs(velocity.x) > abs(velocity.y)
}

关于ios - UIPanGestureRecognizer - 仅垂直或水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7100884/

相关文章:

ios - 是否可以手动执行 Popover Segue(从动态 UITableView 单元格)?

objective-c - 如何在 ios 5.0 中执行 Bump Distortion?

ios - GestureRecognizer 接受所有触摸输入

iphone - UIGestureRecognizers vs touchesBegan/touchesMoved/touchesEnded(准确性)

ios - Firebase 的 token 问题

javascript - 使用 JavascriptCore 在 iOS 中解决 Javascript promise

objective-c - 隐藏 KeyWindow 以截取空白屏幕截图

ios - 在iOS中的UIView上连续按下手势

ios - 将 Pan UIGesture 转换为滑动手势

iphone - View 透明度和手势处理