如何在另一个视图控制器的顶部滑动一个视图控制器?

How to swipe a View controller over the top of another view controller?

我有一个 table 视图控制器和另一个视图控制器。现在我的要求是,当我滑动视图控制器时,我需要将 table 视图控制器滑动到另一个视图控制器的一半。我可以显示的图像是这样的:

是否可以使用滑动手势来实现。如果可能,我如何在 Swift3 中执行此操作?

我要做的是首先创建并隐藏一个 UIView,让您 select 屏幕右侧的 UIViewController 并设置动画以在用户滑动时显示.

然后你实现这个方法 returns UIViewControllerAnimatedTransitioning,一个你想为自定义转换实现的 class。

- (id<UIViewControllerAnimatedTransitioning>) navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController*)fromVC toViewController:(UIViewController*)toVC

这可能是一个很好的自定义过渡教程。 https://www.raywenderlich.com/110536/custom-uiviewcontroller-transitions

我会调查 SWRevealViewController。它只需几行代码即可为您提供所需的行为。您可以展示一个 SWRevealViewController 来容纳您的 topbottom UIViewController 并将其展示为您的场景。

// Your Front View Controller
let frontStoryboard = UIStoryboard(name: "FrontStoryboard", bundle: .main)
let frontVC = frontStoryboard.instantiateInitialViewController()

// Your Rear View Controller
let rearStoryboard = UIStoryboard(name: "RearStoryboard", bundle: .main)
let rearVC = rearStoryboard.instantiateInitialViewController()

// Create Reveal View Controller From Both
if let revealVC = SWRevealViewController(rearViewController: rearVC, frontViewController: frontVC) {
    present(revealVC, animated: true) {

    }
}

使用 SWRevealViewController 您可以将您尝试滑入的 UIViewController 设置为 frontViewController 并且您可以简单地使用单个 rearViewController代码行。

// When you import SWRevealViewController every UIViewController
// has a method revealViewController() that returns the revealViewController
// that you can tell to toggle it's reveal state using the below
self.revealViewController().revealToggle(animated: true)

编辑

我相信您正在尝试构建一个滑动导航菜单。这是 link 到 Ray Wenderlich 教程,他正在创建您正在寻找的导航。

虽然有库可以为你做这件事,但如果你打算自己做,基本的想法是你可以创建一个 "swipe from edge" 手势识别器来启动视图的自定义呈现控制器(上面有你的菜单)。它包括:

  • 自定义转换委托(符合UIViewControllerTransitioningDelegate协议),指定在呈现下一个场景时使用的动画控制器和交互控制器(均在下文描述);

  • 一个动画控制器(符合UIViewControllerAnimatedTransitioning),从右边缘控制场景的动画;

  • 一个交互控制器(一个 UIPercentDrivenInteractiveTransition),您可以使用它来选择性地通过手势驱动转换;

  • 一个表示控制器(一个 UIPresentationController 子类),它指示是否删除所呈现的视图(在这种情况下,您不希望它被删除),以及任何其他chrome 与新场景的动画演示一起进行动画处理(例如,您经常使演示视图变暗或模糊);和

  • 驱动交互控制器的手势识别器。

有关详细信息,请参阅 WWDC 视频 Custom Transitions Using View Controllers and A Look Inside Presentation Controllers

请参阅 https://github.com/robertmryan/SwiftCustomTransitions/tree/rightside 以获取呈现以下 UX 的 Swift 3 示例:

诚然,这已经足够复杂了,您可能需要考虑使用第三方库来呈现滑入式菜单。但如果你想"roll your own",这些是涉及的基本部分。