使用 Pan 手势识别器来关闭视图控制器

Using Pan gesture recognizer to bring down a view controller

我希望能够在我的主视图控制器上向下滑动,并让我的第二个视图控制器从上方向下滑动。我希望这种过渡是交互式的,因为您可以在 VC 之间来回切换而不必完成整个过渡(像带分页的滚动视图一样跟随用户的手指)。

这是在新的 snapchat 更新中在视图控制器之间滑动时可以看到的效果。当您第一次打开应用程序时,您位于相机屏幕上。如果您向任何方向(上、下、左或右)滑动,相应的视图就会出现并覆盖相机屏幕。当您在视图之间滑动时,它们基本上都覆盖了主视图(而不是像我在网上找到的许多使用滚动视图来实现此效果的教程那样将其移到一边)。

从本质上讲,它看起来像一个垂直页面视图控制器,但不是在新视图控制器进入时将当前视图控制器移出屏幕,新视图控制器会覆盖当前视图控制器,直到它完全位于其顶部.

据我了解,平移手势识别器可以解决问题。 有谁知道我该怎么做。我一直在寻找,似乎无法弄清楚。

I want to be able to swipe down on my main view controller and have my second view controller be brought down from above. I want this transition to be interactive

好的,您正在描述自定义交互式过渡动画。如何实现它的具体细节取决于您希望它是推送转换还是呈现(模态)转换。我假设它是一个演示文稿(模态)过渡。

因此,您将从设置呈现的视图控制器的 transitioningDelegate 开始。一切都从那里起飞。平移手势识别器将调用 present, 并且将调用转换委托的委托方法:

  • animationController(forPresented:presenting:source:)
  • interactionControllerForPresentation(using:)

第二种方法中 return 的交互控制器负责通过更新动画的 "frame" 来响应平移手势的每个变化(以及转换协调器)。

如果这仅适用于 iOS 10,这很容易,因为您可以使用 UIViewPropertyAnimator。当手势结束并且您决定完成或取消动画时,它具有 "hurry" 到动画结束或开始的非凡能力。否则,您最好使用 UIPercentDrivenInteractiveTransition 对象来帮助您。