在两个UIViewControllers的视图之间滑动

时间:2013-08-04 20:41:28

标签: ios uiview uiviewcontroller swipe

我知道我已经问了几次这个问题,但我很缺乏经验,并且认为我没有得到正确答案。

我现在有两个视图控制器,每个控制器都有一个.h文件,一个.m文件和一个.xib文件。在两个.xib文件中,我都有一个UIView。如何制作它以便您可以在这两个视图之间滑动?例如,应用程序在第一个视图上打开,然后从右向左滑动,出现下一个视图。我希望在滑动照片时,滑动的动画就像照片应用程序的动画一样。

4 个答案:

答案 0 :(得分:17)

虽然您可以自己实现此功能(custom container view controllerUIPanGestureRecognizerUIScrollView一起使用),但如果使用iOS 6及更高版本,最简单的方法是使用{{3使用“滚动”过渡样式。

考虑这个故事板:

pageviewcontroller storyboard

它由一个页面视图控制器和两个两页的场景组成。第1页的故事板标识符为one,基类为PageOneViewController。第2页的故事板标识符为two,基类为PageTwoViewController

然后我编写了一个UIPageViewController子类(也许很明显,这是我为上述故事板的第一个场景指定的类),它具有以下代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.dataSource = self;

    [self setViewControllers:@[[self.storyboard instantiateViewControllerWithIdentifier:@"one"]] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    if ([viewController isKindOfClass:[PageOneViewController class]])
        return nil;

    return [self.storyboard instantiateViewControllerWithIdentifier:@"one"];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    if ([viewController isKindOfClass:[PageTwoViewController class]])
        return nil;

    return [self.storyboard instantiateViewControllerWithIdentifier:@"two"];
}

您也可以使用NIB执行此操作,但它需要编写更多代码。如果你搜索UIPageViewController XIB,你可能会得到一些点击。

如果您需要支持6.0之前的iOS版本,则必须使用平移手势或滚动视图执行自定义容器方法。

答案 1 :(得分:4)

有很多正确的方法来丰富你的目标。

例如:

1)在iOS 6中,您可以将UIPageViewController与transitionStyle属性UIPageViewControllerTransitionStyleScroll

一起使用

2)您可以将UIScrollView与属性pagingEnable = YES;一起使用,并在其中添加您的观点。此外,您还需要实现所有容器方法addChildViewController:removeFromParentViewControllerwillMoveToParentViewController:didMoveToParentViewController:来处理控制器的出现/消失方法

3)您可以找到第三方解决方案,如:

答案 2 :(得分:1)

这是一个很棒的回购:

https://github.com/goktugyil/EZSwipeController

您基本上需要一个UIPageViewController并将ViewControllers放在其中。

答案 3 :(得分:-1)

你可以使用这个回购。它对于RnD来说简单易懂。 (Swift 3代码)

https://github.com/lakshikabhardwaj/LBViewControllerCollection

     let mainViewController = CPPageMenuVC(nibName: "CPPageMenuVC", bundle: nil)
      let pageMenuarray :[PageModal] = [PageModal(pageTitle: "Cat", pageVC: cpCatVC),PageModal(pageTitle: "Cow", pageVC: cowCX),PageModal(pageTitle: "Chat", pageVC: cpCatVC),PageModal(pageTitle: "ElephantElephant", pageVC: elephantVC)]

      pageMenuVC.pageArray = pageMenuarray
      pageMenuVC.tabHeight = 0    // WITHOUT TOPICS