Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 截取UIScrollView上的平移手势会中断滚动_Ios_Ios5_Uiscrollview_Uigesturerecognizer_Uipangesturerecognizer - Fatal编程技术网

Ios 截取UIScrollView上的平移手势会中断滚动

Ios 截取UIScrollView上的平移手势会中断滚动,ios,ios5,uiscrollview,uigesturerecognizer,uipangesturerecognizer,Ios,Ios5,Uiscrollview,Uigesturerecognizer,Uipangesturerecognizer,我有一个垂直滚动的UIScrollView。我还想处理它的水平平移,同时允许默认的垂直滚动行为。我在滚动视图上放置了一个透明的UIView,并添加了一个平移手势识别器。这样,我可以得到平底锅刚刚好,但滚动视图没有收到任何手势 我已经实现了以下UIPangestureRecognitizerDelegate方法,希望将我的手势识别器仅限于水平平移,但这没有帮助: - (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestu

我有一个垂直滚动的
UIScrollView
。我还想处理它的水平平移,同时允许默认的垂直滚动行为。我在滚动视图上放置了一个透明的
UIView
,并添加了一个平移手势识别器。这样,我可以得到平底锅刚刚好,但滚动视图没有收到任何手势

我已经实现了以下
UIPangestureRecognitizerDelegate
方法,希望将我的手势识别器仅限于水平平移,但这没有帮助:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
    // Only accept horizontal pans here.
    // Leave the vertical pans for scrolling the content.
    CGPoint translation = [gestureRecognizer translationInView:self.view];
    BOOL isHorizontalPan = (fabsf(translation.x) > fabsf(translation.y));
    return  isHorizontalPan;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return (otherGestureRecognizer == _scrollView.panGestureRecognizer);
}

好的,我知道了。我需要做两件事来实现这一目标:

1) 将我自己的平移识别器连接到滚动视图本身,而不是它上面的另一个视图

2) 此
UIgestureRecognitizerDelegate
方法可防止在同时调用默认滚动视图和我自己的滚动视图时发生的愚蠢行为

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

我有同样的问题要解决,我做到了:

1) 将我自己的平移识别器连接到滚动视图

2) 在以下日期返回“是”: –手势识别器:应与手势识别器同时识别:

这将允许两种手势都起作用。这意味着在垂直滚动上,您的panGesture委托和scrollView委托都将被激发。如果它是一个水平滚动,它将只调用您的panGesture代理

3) 在我的panGesture委托中,检测它是否为水平滚动,如果不是,则忽略。

快速回答:

let scrollViewPanGesture = UIPanGestureRecognizer(target: self, action: #selector(onPan(_:)))
scrollViewPanGesture.delegate = self
scrollView.addGestureRecognizer(scrollViewPanGesture)

extension ViewController: UIGestureRecognizerDelegate {
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
}

您是否尝试过
[panGesture setCancelsTouchesInView:NO]?在
ShouldRecognizeSimultaneous With GestureRecognizer
中简单地返回YES可能也会帮助您找出问题所在。只是尝试了一下,没有区别。ShouldRecognizeSimultaneous With GestureRecognizer的默认行为是返回no,因此,add是不需要的。将返回值更改为
YES
,效果很好。这与我在自己的答案中建议的完全相同。@BlackRider不是。这将返回YESThanks
gestureRecognizer:应该使用gestureRecognizer同时识别。