在同一手势中将一个视图拖动到另一个视图。

3
我正在尝试复制苹果iOS 10地图应用程序中的底部表单。大部分已经实现了。我一直在查看this SO postPulley on GitHub,但它们都没有解决我的问题。
当表单完全打开时,可以将表单内容滚动为UITableView,但当用户尝试向下滚动(其中UITableViewcontentOffset将为负数)时,手势会拖动表单而不是UITableView。手势无缝地从拖动UITableView变成拖动表单。
可能需要在手势委托的shouldRecognizeSimultaneouslyWith中禁用UITableView的滚动,但仅在手势开始时调用此函数。
我无法控制UITableViewpanGestureRecognizer,因此我不能捕获手势并确定它应该移动哪个视图。
如何在手势进行中更改UIGestureRecognizer应识别的触摸内容?

screenshot of Apple's iOS 10 Maps app


你能否为你的自定义pan手势实现shouldRecognizeGesture方法,并返回tableView.contentOffset == 0? - Sean Lintern
1个回答

0

尝试

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    if gestureRecognizer == myCustomPanGesture {
        return self.tableView.contentOffset == 0
    }
    return true
}

这会导致表视图和工作表同时滚动。当工作表被向下拖动时,UITableView的contentOffset也在增加。但是这并不能解决问题;如果手势从正的contentOffset开始拖动,则当contentOffset达到零时,手势不会转而拖动工作表。 - Wiingaard
也许你需要创建一个带有平移的不可见视图,并指定翻译的位置。 - Sean Lintern
但是这样做会失去UITableView滑动效果,当你滑动时,它会自由滚动并逐渐减速。对吧? - Wiingaard
基本上,除非您通过保存平移速度并覆盖targetContentOffset并返回基于速度的值来重新创建它,否则它永远不会相同。 - Sean Lintern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接