问题描述
我以 Photo Scroller 为例Apple 的网站,并尝试通过复制代码来实现我自己的专辑.现在, UIScrollView 不可见.我如何让它出现?
I took the Photo Scroller example from Apple's website and tried to implement my own Album by copying the code. Now, the UIScrollView is not visible. How do I make it appear?
我所做的唯一代码更改是创建 UIPageViewController.在我的情况下,打开它的是一个 UIViewController 而不是 AppDelegate.
The only code change that I made was in creating the UIPageViewController. In my case, it's a UIViewController that is opening it and not the 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 的视图添加为 BasePhotoViewController 的视图的子视图.您的 BasePhotoViewController 类应如下所示.注意 viewDidLoad 中的代码.
You are not adding the pageViewController's view as a subview of BasePhotoViewController's view. Your BasePhotoViewController class should look something like this. Note the code in 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,因为 Apple 的 Photo Scroller 代码使用情节提要.我从情节提要中删除了 UIPageViewController 并在其位置创建了一个 BasePhotoViewController.如果您没有从情节提要加载 BasePhotoViewController,则应将 initWithCoder: 中的代码移动到适当的初始化程序.
Note: I've initialised the UIPageViewController in initWithCoder: because Apple's Photo Scroller code uses a storyboard. I removed the UIPageViewController from the storyboard and created a BasePhotoViewController in its place. If you are not loading BasePhotoViewController from a storyboard, you should move the code in initWithCoder: to the appropriate initialiser.
在 github 上查看这个 示例项目.
See this sample project on github.