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

时间:2017-08-18 17:45:36

标签: ios uitableview swift3 xcode8.2

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

enter image description here

是否可以通过使用Swipegesture实现此目的。如果可能的话,我怎么能在Swift3中做到这一点?

3 个答案:

答案 0 :(得分:3)

虽然有些图书馆会为你做这件事,但如果你打算自己这样做,基本的想法是你可以创建一个"从边缘滑动"手势识别器启动视图控制器的自定义显示(其上有菜单)。它包括:

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

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

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

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

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

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

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

enter image description here

这一切都很复杂,你可能想要考虑使用第三方库来呈现滑入式菜单。但是,如果你想要自己推动自己的",这些是所涉及的基本部分。

答案 1 :(得分:1)

我要做的是首先创建并隐藏UIView,让您在屏幕右侧选择UIViewController并为其设置动画以显示用户滑动的时间。

然后,您实现此方法,该方法返回UIViewControllerAnimatedTransitioning,这是您要为自定义转换实现的类。

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

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

答案 2 :(得分:1)

我会调查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) 代码。

{{1}}

修改

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

enter image description here