ios – 如何将控制从一个手势识别器传递到另一个手势识别器

前端之家收集整理的这篇文章主要介绍了ios – 如何将控制从一个手势识别器传递到另一个手势识别器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下设置.

>主视图控制器(MainViewController)在父子视图控制器配置中包含另一个视图控制器(ListViewController).
> ListVC从MainVC底部的某处开始. ListVC在顶部包含UIView,在底部包含表视图.表格视图附有平移手势识别器.

我想要实现的是当我通过平移手势向上拉ListVC时,它向上移动到屏幕顶部.当它到达顶部(或更确切地说,在顶部布局指南下方一定距离)时,listVC停止在mainVC中移动并且表视图开始滚动.这几乎就像我将控制从平移手势转移到桌面视图的手势.

我现在这样做的方式是实现UIGestureRecognizerDelegate协议.

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

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,shouldBerequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    if gestureRecognizer == pullGesture {          
      return pullGestureIsPriority
    }

    return false
}

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {
  if gestureRecognizer == pullGesture {        
    return !pullGestureIsPriority
  }

  return false
}

如果listVC尚未到达顶部,则pullGesutre是优先级.并且我通过设置self.pullGesture.isEnabled = false并紧接着self.pullGesture.isEnabled = true来使pullGesture失败.

现在一切正常;我能够在没有桌面视图向上滚动的情况下将其拉起来,当listVC到达顶部时,我没有拉动手势,因此桌面视图开始向上滚动.当我向下滚动表格视图直到达到表格视图的顶部时,问题出现了,此时,我希望listVC会通过拉动手势下降.但这并没有发生.不知何故,pullGesture已从触摸事件链中删除.

任何人都知道如何实现这一目标?

请注意,实际上我正试图复制Apple在iOS 10中对Map的影响.我还附上了一个小gif来演示我的意思.

demo image

可在此处找到演示项目.

demo project

解决方法

如果您要查看的是在两个视图控制器之间发送“事件”或“操作”,则可以使用sendAction.

>(1)添加UIButton,将框架设置为CGRect.zero,将其添加到ListVC.
>(2)在要与MainVC联系的ListVC代码中,添加以下行:

myButton.sendAction(Selector(("tapFound")),to: nil,for: nil)

>(3)在您的MainVC中,添加功能

func tapFound() {

}

我之前在一些应用程序中完成了这个操作,告诉主VC添加一些新的子视图.您甚至可以将发件人(UITapRecognizer不是)传递给新的视图控制器,并将tag属性设置为让VC确切知道所需的内容.

猜你在找的iOS相关文章