Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 如何将控制从一个手势识别器传递到另一个手势识别器_Ios_Swift_Uipangesturerecognizer - Fatal编程技术网

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

Ios 如何将控制从一个手势识别器传递到另一个手势识别器,ios,swift,uipangesturerecognizer,Ios,Swift,Uipangesturerecognizer,我有以下设置 主视图控制器(MainViewController)包含父子视图控制器配置中的另一个视图控制器(ListViewController) ListVC从MainVC底部的某个地方开始。ListVC在顶部包含UIView,在底部包含一个表视图。桌子视图附带了一个平移手势识别器 我想要实现的是,当我通过平移手势向上拉动ListVC时,它会向上移动到屏幕顶部。当它到达顶部(或者更准确地说,在顶部布局指南下方的一段距离)时,listVC停止在mainVC中移动,表视图开始滚动。这几乎就像

我有以下设置

  • 主视图控制器(MainViewController)包含父子视图控制器配置中的另一个视图控制器(ListViewController)

  • ListVC从MainVC底部的某个地方开始。ListVC在顶部包含UIView,在底部包含一个表视图。桌子视图附带了一个平移手势识别器

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

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

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

如果listVC未达到顶部,则pullGesutre是一个优先级。通过设置
self.pullspirture.isEnabled=false
,然后紧接着设置
self.pullspirture.isEnabled=true
,我使Pullspirture失败

现在一切都好了;我能够在不向上滚动表视图的情况下将其向上拉,当listVC到达顶部时,我的拉手势失败,因此表视图开始向上滚动。当我向下滚动表格视图直到到达表格视图的顶部时,问题就出现了,在这一点上,我希望listVC会通过拉动手势下降。但这并没有发生。不知何故,Pull手势已从触摸事件链中移除

有人知道我怎样才能做到这一点吗

请注意,我实际上是在尝试将苹果的做法复制到iOS 10的地图上。我还附加了一个小gif来演示我的意思

可以在这里找到一个演示项目


如果您希望在两个视图控制器之间发送“事件”或“操作”,则可以使用sendAction

  • (1) 添加一个UIButton,将框架设置为CGRect.zero,将其添加到ListVC

  • (2) 在要联系MainVC的ListVC代码中,添加以下行:

    myButton.sendAction(Selector(("tapFound")), to: nil, for: nil)
    
  • (3) 在MainVC中,添加以下函数:

    func tapFound() {
    
    }
    

我以前在一些应用程序中这样做过,告诉主VC在新的子视图中添加一些内容。您甚至可以将发送者(UITARecognizer不是)传递给新的视图控制器,并将tag属性设置为让VC确切知道所需内容。

我通过在我的平移手势函数中添加此项解决了此问题

        guard scrollView.contentOffset.y == 0 else{return}

因此,每当它到达顶部(滚动视图)时,它就会开始向下平移

你能分享一个演示项目吗?@BlackM,我添加了一个演示项目。你解决了这个问题吗?
func tapFound() {

}
        guard scrollView.contentOffset.y == 0 else{return}