ios - 在两个 UIViewControllers 的 View 之间滑动

标签 ios uiview uiviewcontroller swipe

我知道我已经问过几次这个问题,但我经验不足,认为我还没有得到正确的答案。

我现在有两个 View Controller ,每个都有一个 .h 文件、一个 .m 文件和一个 .xib 文件。在这两个 .xib 文件中,我都有一个 UIView。我怎样才能让你可以在这两个 View 之间滑动?例如,应用程序在第一个 View 中打开,然后您从右向左滑动,下一个 View 就会出现。我希望在滑动照片时滑动的动画类似于照片应用程序的动画。

最佳答案

虽然您可以自己实现它(使用 custom container view controller 结合 UIPanGestureRecognizerUIScrollView),但如果使用 iOS 6 及更高版本,最简单的方法是使用一个Page View Controller具有“滚动”过渡样式。

考虑这个 Storyboard:

pageviewcontroller storyboard

它由一个页面 View Controller 和两个页面的两个场景组成。页面 1 有一个 Storyboard标识符 one 和一个基类 PageOneViewController。页面 2 有一个 Storyboard标识符 two 和一个基类 PageTwoViewController

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

- (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 版本,则必须使用平移手势或 ScrollView 的自定义容器方法。

关于ios - 在两个 UIViewControllers 的 View 之间滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18047387/

相关文章:

ios - 依赖项 `Firebase/Core` 未在任何具体目标中使用

iOS ARToolKit Xcode 实现

ios - OpenWeather API 中为零

iphone - 如何在选择时保留 UITableViewCell 中的 subview 背景颜色或为其设置动画?

objective-c - 访问在 Interface Builder 中创建的 View

ios - Swift - tableView 行高仅在滚动或切换展开/折叠后更新

ios - RTCVideoTrack 显示拉伸(stretch)的 WebRTC

iphone - 使用 UINavigatonController 有条件地跳过 iOS 5 应用程序中的 UIViewController

ios - 添加为 subview 时未调用 UIViewController viewWillAppear

iphone - UIImageView 与带图像的 UIView - 效率