Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.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 UIPanGestureRecognizer与UIPinchEstureRecognizer冲突';s超视图_Ios_Uiscrollview_Uigesturerecognizer - Fatal编程技术网

Ios UIPanGestureRecognizer与UIPinchEstureRecognizer冲突';s超视图

Ios UIPanGestureRecognizer与UIPinchEstureRecognizer冲突';s超视图,ios,uiscrollview,uigesturerecognizer,Ios,Uiscrollview,Uigesturerecognizer,我有一个UIScrollView实例,其子视图有自己的UIPangestureRecognitor,用于在scrollview中移动子视图。我希望scrollview的收缩到缩放功能比平移手势具有最高优先级。然而,情况并非如此:当开始用一根手指在我的子视图上挤压时,它将平移 到目前为止,我尝试的是: 手势识别器:应与手势识别器同时识别::它将平移和挤压 [PangestureRecognitizer RequiremgestureRecognitizerToFail:scrollView.Pi

我有一个UIScrollView实例,其子视图有自己的UIPangestureRecognitor,用于在scrollview中移动子视图。我希望scrollview的收缩到缩放功能比平移手势具有最高优先级。然而,情况并非如此:当开始用一根手指在我的子视图上挤压时,它将平移

到目前为止,我尝试的是:

  • 手势识别器:应与手势识别器同时识别:
    :它将平移和挤压
  • [PangestureRecognitizer RequiremgestureRecognitizerToFail:scrollView.PinchgestureRecognitizer]:平移不再有效(回调仅在
    UIgestureRecognitizerStateEnded
    状态下触发)。而
    pangestureerecognizer.cancelsTouchesInView=NO
    也无济于事
我的理解是,当从子视图开始挤压时,滚动视图和子视图都只接收一次触摸,这就是为什么在第二种情况下,挤压手势识别器甚至没有失败,因为它甚至没有开始处理事件


那么,关于如何实现这一点有什么想法吗?

一种方法是允许与scrollView.PinchGestureRecognitor同时交互,然后如果scrollView.PinchGestureRecognitor实际正在缩放,则取消PangestureRecognitor。我知道如何取消它们的唯一方法是禁用/启用

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

    if (gestureRecognizer == panGestureRecognizer){
        if (otherGestureRecognizer == scrollView.panGestureRecognizer) {
            return 0;
        }
        else if(otherGestureRecognizer == scrollView.pinchGestureRecognizer){
            if (scrollView.pinchGestureRecognizer.scale != 1) {
                gestureRecognizer.enabled = 0;
                gestureRecognizer.enabled = 1;
            }
        }
    }
    return 1;
}

谢谢事实上,如果比例不同于1,则在禁用/启用技巧后返回“是”,否则返回“否”就足够了。是与1相同。否与0相同。我知道,但在您的实现中,大多数情况下都返回“是”。我更喜欢只在需要时才返回YES,因为它离默认实现更近,默认实现返回NO。非常好的解决方案。非常感谢。