我有一个 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/