当包含的scrollview被缩放时滚动UIPageViewController,就像Apple的PhotoScroller示例一样

时间:2014-05-11 07:24:32

标签: ios uiscrollview uipageviewcontroller

在Apple PhotoScroller示例中,3个可缩放图像显示在UIPageViewController中。您可以缩放这些图像并在它们之间进行页面,即使它们仍然被缩放。我的应用程序使用PhotoScroller中的代码,唯一的区别是我的UIPageViewController是我的应用程序中另一个UIViewController的子视图控制器 - 即分页功能包含在视图层次结构中。在Apple的版本中,UIPageViewController是根视图控制器(实际上由故事板设置)。在我的代码中,除非我将内容返回到未缩放的比例,否则我不会获得分页行为。对于我的应用程序,我不想强​​迫用户这样做。我需要做什么才能按照我想要的方式工作?

更新 我已确定将页面视图控制器设置为根视图控制器是手动导致Apple示例代码显示不需要的行为。也就是说,在app delegate中创建页面视图控制器

        // assign the first page to the pageViewController (our rootViewController)
    UIPageViewController *pageViewController = [[UIPageViewController alloc] init];
    pageViewController.dataSource = self;

    [pageViewController setViewControllers:@[pageZero]
                                  direction:UIPageViewControllerNavigationDirectionForward
                                   animated:NO
                                 completion:NULL];
    self.window.rootViewController = pageViewController;

使缩放的图像简单地在边缘反弹,而不是缩放到下一个图像。原始代码是:

// assign the first page to the pageViewController (our rootViewController)
    UIPageViewController *pageViewController = (UIPageViewController *)self.window.rootViewController;
    pageViewController.dataSource = self;

    [pageViewController setViewControllers:@[pageZero]
                                  direction:UIPageViewControllerNavigationDirectionForward
                                   animated:NO
                                 completion:NULL];

为什么这会在图像缩放时破坏滚动行为?

解决

UIPageViewController必须正确启动,如

        _pageViewController =  [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];

我只是打电话给alloc] init]

2 个答案:

答案 0 :(得分:0)

为了即使在放大图片时浏览UIPageViewController,我建议创建单独的可缩放UIScrollview以包含每个单独的图像,然后将它们作为子视图添加到每个分页页面(和不可缩放的)UIScrollview;这样,通过分离手势接收器,您可以在分页时保持放大图像。

答案 1 :(得分:0)

UIPageViewController必须正确启动,如

        _pageViewController =  [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];

我只是将alloc] init]称为storyboard的替代,这还不够。