1.首先將UIPageViewController的切換方式設置為翻書樣式,并實例化UIPageViewController對象,根據給定的屬性
NSDictionary *options =[NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:UIPageViewControllerSpineLocationMid]forKey: UIPageViewControllerOptionSpineLocationKey];
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options: options];
2.設置雙面顯示
_pageController.doubleSided = YES;
3.將將要顯示的前兩個控制器先賦值給pageViewController,此處為雙面,所以賦值的時候一定要有兩個控制器
MoreViewController *initialViewController =[self viewControllerAtIndex:0];// 得到第一頁
MoreViewController *initialViewController2 =[self viewControllerAtIndex:1];// 得到第二頁
NSArray *viewControllers =[NSArray arrayWithObjects:initialViewController,initialViewController2, nil];
[_pageController setViewControllers:viewControllers
direction:UIPageViewControllerNavigationDirectionForward
animated:YES
completion:nil];
3.設置代理并實現代理方法
_pageController.dataSource = self;
#pragma mark- UIPageViewControllerDataSource
// 返回上一個ViewController對象
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{
NSUInteger index = [self indexOfViewController:(MoreViewController *)viewController];
if ((index == 0) || (index == NSNotFound)) {
return nil;
}
index--;
MoreViewController * vc = [self viewControllerAtIndex:index];
return vc;
}
// 返回下一個ViewController對象
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{
NSUInteger index = [self indexOfViewController:(MoreViewController *)viewController];
if (index == NSNotFound) {
return nil;
}
index++;
if (index == [self.pageContent count]) {
return nil;
}
return [self viewControllerAtIndex:index];
}
數據源方法中用到的自定義方法
// 得到相應的VC對象
- (MoreViewController *)viewControllerAtIndex:(NSUInteger)index {
if (([self.pageContent count] == 0) || (index >= [self.pageContent count])) {
return nil;
}
// 創建一個新的控制器類,并且分配給相應的數據
MoreViewController *dataViewController =[[MoreViewController alloc] init];
dataViewController.dataObject =[self.pageContent objectAtIndex:index];
return dataViewController;
}
// 根據數組元素值,得到下標值
- (NSUInteger)indexOfViewController:(MoreViewController *)viewController {
return [self.pageContent indexOfObject:viewController.dataObject];
}
經過觀察,執行過程大致是這樣的,首先出現的是 第0頁,第1頁,當我們往后翻的時候,程序需要加載出來后面兩頁的內容,于是,就執行了兩次第二個數據源方法,得到后面兩個頁面以后,就可以進一步的顯示了,同理,往前翻也是一樣的。
4. 定義“這本書”的尺寸,并添加到當前視圖和控制器上
[[_pageController view] setFrame:CGRectMake(0,0.5*([UIScreen mainScreen].bounds.size.height-300), [UIScreen mainScreen].bounds.size.width,300)];
[self addChildViewController:_pageController];
[[self view] addSubview:[_pageController view]];// 設置UIPageViewController的配置項
5.貌似是寫完了,但是顯示出來跟預想的差距很大,往后翻的時候是正常的,當時往前翻頁的時候左側的視圖總是遮蓋右側的視圖,額,在查閱了當前的view的所有分布層次以后,才發現,原來是我自定義的控件設置的尺寸沒有隨著雙面而縮小,于是把右側的也擋住了,所以,你可以設置自定義的控制器的view.clipToBounds ,最后再調整一下view上面控件的大小
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
self.label.frame = self.view.bounds;
}
6.可以看結果了~