在两个 UIViewController 的视图之间滑动
Posted
技术标签:
【中文标题】在两个 UIViewController 的视图之间滑动【英文标题】:Swipe between two UIViewControllers' views 【发布时间】:2013-08-04 20:41:28 【问题描述】:我知道我已经多次问过这个问题,但我非常缺乏经验,并且认为我还没有得到正确的答案。
我现在有两个视图控制器,每个控制器都有一个 .h 文件、一个 .m 文件和一个 .xib 文件。在这两个 .xib 文件中,我都有一个 UIView。我怎样才能使您可以在这两个视图之间滑动?例如,应用程序在第一个视图上打开,然后从右向左滑动,下一个视图出现。我希望在浏览照片时滑动的动画与照片应用程序的动画一样。
【问题讨论】:
【参考方案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) 您可以找到第三方解决方案,例如:
TTScrollSlidingPagesController PagerViewController【讨论】:
您能帮我解决一下滚动视图选项吗?正如我所说,我对 Objective-C 不是很好,所以我真的不知道我在做什么。你能写一些我如何实现 UIScrollView 的示例代码吗?同样,正如我之前所说,我有两个视图控制器(我不知道这是否正确),每个控制器内部都有一个视图。谢谢!如果您需要,请询问更多信息! 网上有很多教程和示例:raywenderlich.com/10518/…eureka.ykyuen.info/2010/05/22/…gabriel-tips.blogspot.com/2012/02/…iosdevnotes.com/2011/03/uiscrollview-paging @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
【讨论】:
以上是关于在两个 UIViewController 的视图之间滑动的主要内容,如果未能解决你的问题,请参考以下文章
一个 UIViewController 中的两个 UICollectionView