http://www.kyleduo.com/?p=278
viewController -> pageViewController -> pageContentViewControllers
一个viewController添加一个pageViewController
[viewController addChildViewController:_pageViewController];
一个pageViewController 添加多个pageContentViewController[自定义视图]为subPage
[_pageContentViewController setViewControllers:@[a,b,c]];
技巧: 初始设置一个即可,然后实现协议的方法获取befor,after的contentViewController
pageViewController 相当于一个controller容器,添加多个contentViewController,自身的定义,以及datasource在父viewController中定义
// // ViewController.m // PageViewTest // #import "ViewController.h" #import "PageContentViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _pageTitles = @[@"Over 200 Tips and Tricks", @"Discover Hidden Features", @"Bookmark Favorite Tip", @"Free Regular Update"]; _pageImages = @[@"page1.png", @"page2.png", @"page3.png", @"page4.png"]; // create page view controller self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"]; self.pageViewController.dataSource = self; PageContentViewController *startingViewController = [self viewControllerAtIndex:0]; NSArray *viewControllers = @[startingViewController]; [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil]; self.pageViewController.view.frame = CGRectMake(0,0, self.view.frame.size.width, self.view.frame.size.height); [self addChildViewController:_pageViewController]; [self.view addSubview:_pageViewController.view]; [self.view bringSubviewToFront:_startAgainButton]; [self.pageViewController didMoveToParentViewController:self]; } - (IBAction)startWalkthrough:(id)sender { PageContentViewController *startingViewController = [self viewControllerAtIndex:0]; NSArray *viewControllers = @[startingViewController]; [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:NO completion:nil]; } -(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { NSUInteger index = ((PageContentViewController *)viewController).pageIndex; if ((index == 0) || (index == NSNotFound)) { return nil; } index -= 1; return [self viewControllerAtIndex:index]; } -(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { NSUInteger index = ((PageContentViewController *)viewController).pageIndex; if (index == NSNotFound) { return nil; } index += 1; if (index == [self.pageTitles count]) { return nil; } return [self viewControllerAtIndex:index]; } -(PageContentViewController *)viewControllerAtIndex:(NSUInteger)index { if (([self.pageTitles count] == 0) || (index >= [self.pageTitles count])) { return nil; } PageContentViewController *pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"]; pageContentViewController.imageFile = self.pageImages[index]; pageContentViewController.titleText = self.pageTitles[index]; pageContentViewController.pageIndex = index; return pageContentViewController; } // 实现下面的两个方法才能显示地步的页面指示。颜色区分在AppDelegate中设定。同时点击底部的左右两侧也会前后翻页。注释掉则不会 //- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController //{ // return [self.pageTitles count]; //} // //-(NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController //{ // return 0; //} @end
// // PageContentViewController.m // #import "PageContentViewController.h" @interface PageContentViewController () @end @implementation PageContentViewController - (void)viewDidLoad { [super viewDidLoad]; [self.titleLabel setText:self.titleText]; [self.view bringSubviewToFront:self.titleLabel]; [self.backgroundImageView setImage:[UIImage imageNamed:self.imageFile]]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end
csdn有上传资源