gpt4 book ai didi

ios - UIPanGestureRecognizer 与 UIPinchGestureRecognizer 的 super View 冲突

转载 作者:可可西里 更新时间:2023-11-01 05:43:51 25 4
gpt4 key购买 nike

我有一个带有 subview 的 UIScrollView 实例,它有自己的 UIPanGestureRecognizer,用于在 ScrollView 内移动 subview 。我希望 ScrollView 的捏合缩放功能优先于平移手势。然而,情况并非如此:当开始用一根手指在我的 subview 上捏合时,它会平移。

到目前为止我尝试了什么:

  • gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:: 它将平移和捏合
  • [panGestureRecognizer requireGestureRecognizerToFail:scrollView.pinchGestureRecognizer];:平移将不再起作用(仅针对 UIGestureRecognizerStateEnded 状态触发回调)。 panGestureRecognizer.cancelsTouchesInView = NO 也无济于事。

我的理解是,当从 subview 开始捏合时, ScrollView 和 subview 都只接收一次触摸,这就是为什么在第二种情况下捏合手势识别器甚至没有失败,因为它甚至没有开始处理事件。

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

最佳答案

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

-(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;
}

关于ios - UIPanGestureRecognizer 与 UIPinchGestureRecognizer 的 super View 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30464381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com