我知道我已经问过这个问题几次了,但是我非常缺乏经验,并且认为我还没有得到正确的答案。
我现在有两个视图控制器,每个控制器都有一个 .h 文件、一个 .m 文件和一个 .xib 文件。在这两个 .xib 文件中,我都有一个 UIView。我怎样才能使您可以在这两个视图之间滑动?例如,应用程序在第一个视图上打开,然后从右向左滑动,下一个视图出现。我希望在浏览照片时滑动的动画与照片应用程序的动画一样。
我知道我已经问过这个问题几次了,但是我非常缺乏经验,并且认为我还没有得到正确的答案。
我现在有两个视图控制器,每个控制器都有一个 .h 文件、一个 .m 文件和一个 .xib 文件。在这两个 .xib 文件中,我都有一个 UIView。我怎样才能使您可以在这两个视图之间滑动?例如,应用程序在第一个视图上打开,然后从右向左滑动,下一个视图出现。我希望在浏览照片时滑动的动画与照片应用程序的动画一样。
虽然您可以自己实现这一点(使用自定义容器视图控制器与UIPanGestureRecognizer
or结合使用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 版本,则必须使用平移手势或滚动视图执行自定义容器方法。
有许多正确的方法可以丰富你的目标。
例如:
1) 从 iOS 6 开始,您可以使用UIPageViewController
transitionStyle 属性UIPageViewControllerTransitionStyleScroll
2)您可以使用UIScrollView
with 属性pagingEnable = YES;
并在其中添加您的视图。此外,您将需要实现所有容器方法 addChildViewController:
, removeFromParentViewController
, willMoveToParentViewController:
,didMoveToParentViewController:
来处理控制器的出现/消失方法
3)您可以找到第三方解决方案,例如:
这是一个很好的回购:
https://github.com/goktugyil/EZSwipeController
你基本上需要一个 UIPageViewController 并将你的 ViewControllers 放在里面。
你可以使用这个 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