如何在另一个视图控制器的顶部滑动一个视图控制器?
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
来容纳您的 top 和 bottom 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",这些是涉及的基本部分。
我有一个 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
来容纳您的 top 和 bottom 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",这些是涉及的基本部分。