如何用UIScrollView实现UIPageViewController?

我从苹果网站上拿了Photo Scroller的例子,并试图通过复制代码来实现我自己的Album。 现在, UIScrollView不可见。 我如何让它出现?

我唯一的代码更改是在创buildUIPageViewController 。 在我的情况下,这是一个UIViewController打开它,而不是AppDelegate

 @implementation BasePhotoViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nil bundle:nibBundleOrNil]; if (self) { // kick things off by making the first page PhotoViewController *pageZero = [PhotoViewController photoViewControllerForPageIndex:0]; if (pageZero != nil) { // assign the first page to the pageViewController (our rootViewController) //UIPageViewController *pageViewController = (UIPageViewController *) [[UIApplication sharedApplication] keyWindow].rootViewController; UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:0 navigationOrientation:0 options:nil]; //UIPageViewController *pageViewController = (UIPageViewController *)self.parentViewController; pageViewController.dataSource = self; [pageViewController setViewControllers:@[pageZero] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL]; } } return self; } 

您不会将pageViewController的视图添加为pageViewController视图的子视图。 你的BasePhotoViewController类应该看起来像这样。 请注意viewDidLoad的代码。

BasePhotoViewController.h:

 @interface BasePhotoViewController : UIViewController <UIPageViewControllerDataSource> @property (nonatomic, strong) UIPageViewController * pageViewController; @end 

BasePhotoViewController.m:

 #import "BasePhotoViewController.h" #import "PhotoViewController.h" @implementation BasePhotoViewController @synthesize pageViewController; - (id)initWithCoder:(NSCoder *)coder { self = [super initWithCoder:coder]; if (self) { PhotoViewController *pageZero = [PhotoViewController photoViewControllerForPageIndex:0]; if (pageZero != nil) { self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:0 navigationOrientation:0 options:nil]; self.pageViewController.dataSource = self; [self.pageViewController setViewControllers:@[pageZero] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL]; } } return self; } - (void)viewDidLoad { [super viewDidLoad]; [self addChildViewController:self.pageViewController]; [self.view addSubview:self.pageViewController.view]; [self.pageViewController didMoveToParentViewController:self]; } # pragma mark - UIPageViewControllerDataSource - (UIViewController *)pageViewController:(UIPageViewController *)pvc viewControllerBeforeViewController:(PhotoViewController *)vc { NSUInteger index = vc.pageIndex; return [PhotoViewController photoViewControllerForPageIndex:(index - 1)]; } - (UIViewController *)pageViewController:(UIPageViewController *)pvc viewControllerAfterViewController:(PhotoViewController *)vc { NSUInteger index = vc.pageIndex; return [PhotoViewController photoViewControllerForPageIndex:(index + 1)]; } @end 

注意:我已经初始化了initWithCoder:UIPageViewController initWithCoder:因为Apple的Photo Scroller代码使用了一个storyboard。 我从故事板中删除了UIPageViewController ,并在其位置创build了一个BasePhotoViewController 。 如果不从故事板加载BasePhotoViewController ,则应将initWithCoder:的代码移到相应的初始化程序中。

编辑:看到这个示例项目在github上。