【发布时间】:2018-10-05 07:19:46
【问题描述】:
我一直在尝试自定义交互式视图控制器演示和关闭(使用 UIPresentationController、UIPercentDrivenInteractiveTransition、UIViewControllerAnimatedTransitioning 和 UIViewControllerTransitioningDelegate 的组合),并且大部分都可以很好地满足我的需求。
但是,在我阅读过的任何教程或文档中,我还没有找到一种常见的情况,这导致我提出以下问题:
...
当被解除的视图包含 UIScrollView(即 UITableView、UICollectionView、WKWebView 等)时,通过平移手势处理自定义交互式视图控制器解除的正确方法是什么?
...
基本上,我想要的是以下内容:
视图控制器可以通过向下平移以交互方式关闭。这是许多应用程序中常见的用户体验。
如果关闭的视图控制器包含(垂直滚动)滚动视图,则向下平移会按预期滚动该视图,直到用户到达顶部,然后滚动停止并发生平移关闭。
滚动视图应该正常运行。
我知道这在技术上是可能的 - 我在其他应用程序中看到过它,例如 Overcast 和 Apple 自己的音乐应用程序 - 但我无法找到协调我的平移手势的行为与滚动视图的行为。
我自己的大部分尝试都集中在尝试基于其contentOffset.y 有条件地启用/禁用滚动视图(或其关联的平移手势识别器),同时滚动并让视图控制器解除的平移手势识别器从那里接管,但这一直充满问题,我担心我想多了。
我觉得秘密主要在于以下平移手势识别器委托方法:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
// ...
}
我创建了一个简化的示例项目,它应该更清楚地展示场景。非常欢迎任何代码建议!
【问题讨论】:
标签: ios swift uiviewcontroller uiscrollview uipangesturerecognizer