如何在另一个视图控制器的顶部滑动视图控制器?
我有一个表视图控制器和另一个视图控制器。 现在我的要求是,当我滑动视图控制器时,我需要滑动一半的表视图控制器在另一个视图控制器。 我可以显示的图像是这样的:
是否有可能通过使用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你正在寻找的导航。