【问题标题】:Swipe between two UIViewControllers' views在两个 UIViewController 的视图之间滑动
【发布时间】:2013-08-04 20:41:28
【问题描述】:

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

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

【问题讨论】:

    标签: ios uiview uiviewcontroller swipe


    【解决方案1】:

    虽然您可以自己实现这一点(custom container view controller 与 UIPanGestureRecognizer 或 UIScrollView 结合使用),但如果使用 iOS 6 及更高版本,最简单的方法是使用带有“滚动”过渡样式的 Page View Controller .

    考虑这个故事板:

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

    【讨论】:

      【解决方案2】:

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

      例如:

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

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

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

      【讨论】:

      • 您能帮我解决一下滚动视图选项吗?正如我所说,我对 Objective-C 不是很好,所以我真的不知道我在做什么。你能写一些我如何实现 UIScrollView 的示例代码吗?同样,正如我之前所说,我有两个视图控制器(我不知道这是否正确),每个控制器内部都有一个视图。谢谢!如果您需要,请询问更多信息!
      • @user2397282 Flop 给了你很多优秀的链接。您应该浏览其中的一些(如果不是全部)并真正了解它们是如何工作的。如果您花时间通过其中一些链接来研究您的问题,您会发现解决问题的好方法。
      【解决方案3】:

      这是一个很好的回购:

      https://github.com/goktugyil/EZSwipeController

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

      【讨论】:

        【解决方案4】:

        你可以使用这个 repo。它对于 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-23
          • 2016-06-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多