在视图控制器内的 UIView 之间滑动

Posted

技术标签:

【中文标题】在视图控制器内的 UIView 之间滑动【英文标题】:Swipe between UIViews within viewcontroller 【发布时间】:2017-02-07 07:44:38 【问题描述】:

使用单个UIViewController,我创建了两个UIViews(一个在另一个之上)。这一切都是在storyboard 中完成的。

我添加了手势控制功能:

-(void) SwipeLeft:(UISwipeGestureRecognizer *) gest_

if (self.view  == UIViewFirst)
    return;
else
[self.view bringSubviewToFront:UIViewFirst];


-(void) SwipeRight:(UISwipeGestureRecognizer *) gest_

if (self.view  == UIViewSecond)
    return;
else
[self.view bringSubviewToFront:UIViewSecond];


在 viewcontroller 类的viewDidLoad 中,我只是做了

[self.view bringSubviewToFront:UIViewFirst]

现在视图出现了,但它们是空白的。我在两个视图中都添加了标签,看看是否会这样做。没有标签显示。我究竟做错了什么?我应该使用pageControllerpageViewControllerUIScrollView 之类的东西吗?我的目标是能够在包含内容的 UIView 之间滑动(上半部分视图控制器)。

【问题讨论】:

使用pageviewcontroler更好 【参考方案1】:

UIPageViewController 为您处理所有过渡,并将其包裹在漂亮、流畅的动画中。您最初只需设置 viewControllers 属性,然后实现两个委托方法,以便控制器知道接下来会出现什么视图。

 public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?

 public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?

我的建议是你继承 UIPageViewController 并实现这些方法,在这个类上保留一个视图控制器的弱实例数组,然后在 viewDidLoad 中将 pageController.viewControllers 属性设置为你的数组并在委托方法中处理计算当前索引并据此建议下一个控制器。

请注意,您的“视图”实际上必须包含在不同的视图控制器中才能使用 UIPageViewController

更多信息可以找到here

【讨论】:

以上是关于在视图控制器内的 UIView 之间滑动的主要内容,如果未能解决你的问题,请参考以下文章

在两个 UiViewControllers 和 UIViews 之间实现拖动和滑动转换? [关闭]

在视图控制器上启用滑动,但在该 VC 的视图中禁用

如何在视图控制器中为 xib 约束设置动画?

UIView 滑动过渡淡出

在 Swift 中像 Tab View Controller 一样滑动 uiView

UIView滑动手势与目标c中的tableview冲突