9

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

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

4

4 回答 4

17

虽然您可以自己实现这一点(使用自定义容器视图控制器UIPanGestureRecognizeror结合使用UIScrollView),但如果使用 iOS 6 及更高版本,最简单的方法是使用具有“滚动”过渡样式的页面视图控制器。

考虑这个故事板:

浏览量控制器故事板

它由一个页面视图控制器和两个页面的两个场景组成。第 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 版本,则必须使用平移手势或滚动视图执行自定义容器方法。

于 2013-08-04T21:20:38.363 回答
4

有许多正确的方法可以丰富你的目标。

例如:

1) 从 iOS 6 开始,您可以使用UIPageViewController transitionStyle 属性UIPageViewControllerTransitionStyleScroll

2)您可以使用UIScrollViewwith 属性pagingEnable = YES;并在其中添加您的视图。此外,您将需要实现所有容器方法 addChildViewController:, removeFromParentViewController, willMoveToParentViewController:,didMoveToParentViewController:来处理控制器的出现/消失方法

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

于 2013-08-04T21:47:42.587 回答
1

这是一个很好的回购:

https://github.com/goktugyil/EZSwipeController

你基本上需要一个 UIPageViewController 并将你的 ViewControllers 放在里面。

于 2015-11-19T17:07:52.750 回答
-1

你可以使用这个 repo。它对于 RnD 来说非常简单易懂。(斯威夫特 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
于 2017-03-09T08:11:12.390 回答