【发布时间】:2016-11-09 12:29:49
【问题描述】:
我有以下设置。
主视图控制器 (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 来说明我的意思。
可以在此处找到演示项目。
【问题讨论】:
-
你能分享一个演示项目吗?
-
@BlackM,我添加了一个演示项目。
-
你解决了吗?
标签: ios swift uipangesturerecognizer