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

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

在这里输入图像说明

是否有可能通过使用Swipegesture来实现这一点。 如果可能我怎么能在Swift3中做到这一点?

虽然有图书馆为你做这个,如果你要自己做这个,基本的想法是,你可以创build一个“从边缘滑动”的手势识别器来启动一个视图控制器的自定义演示文稿菜单上)。 它包括:

  • 一个自定义的转换委托(符合UIViewControllerTransitioningDelegate协议),指定在下一个场景呈现期间要使用的animation控制器和交互控制器(下面将要描述);

  • 一个animation控制器(符合UIViewControllerAnimatedTransitioning ),指示右边的场景animation;

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

  • 一个表示控制器(一个UIPresentationController子类),指示所呈现的视图是否被删除(在这种情况下,你不希望它被删除),以及任何其他的chromeanimation旁边的新场景的animation演示(例如你经常暗淡或模糊展示视图); 和

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

有关更多信息,请参阅WWDCvideo使用视图控制器和Look Inside Presentation控制器进行 自定义切换 。

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

在这里输入图像说明

这一切都是非常复杂的,你可能想考虑第三方库提供滑入式菜单。 但是,如果你想“滚动你自己”,这是涉及的基本部分。

我会做的是首先创build和隐藏一个UIView ,让你select那些UIViewController在屏幕的右侧,并animation,以显示当用户滑动。

然后你实现这个方法,返回你想要实现自定义转换的类UIViewControllerAnimatedTransitioning

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

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

我会研究SWRevealViewController 。 它只给你几行代码提供你正在寻找的行为。 您可以展示一个SWRevealViewController ,它将保存您的顶部底部 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) 

编辑

我相信你正在试图build立一个滑动导航菜单。 这里是一个Ray Wenderlich教程的链接,他正在创build你正在寻找的导航。

在这里输入图像说明