同样的代码同样的步骤,今天重新做一遍,又能正确显示结果了,昨天早上在一个工程中,纠结很久都没纠结出个成果来,啦啦啦,现在开心了。据我猜测判断,出错的原因,可能在于,我把VIewCOntroller删了,又添加,删了又添加,循环几次,导致程序也弄不清哪个是父视图控制器,哪个是子视图控制器了吧。另外,原先错误工程中,我在子视图控制器中,将“storyboard ID”都添加了“page1”,“page2”等名称,而所谓的自我感觉为父视图控制器的VIewCOntroller,storyboard ID 这块什么都没写,然后运行时,程序出现警告“warning: Unsupported Configuration: Scene is unreachable due to lack of entry points and does not have an identifier for runtime access via -instantiateViewControllerWithIdentifier:.“(大意是为了在程序中动态访问Scene,需要给其设置一个Storyboard ID,所以给出了警告,解决方法:设置一个Storyboard ID即可),博客链接:http://blog.youkuaiyun.com/freedom2028/article/details/8589375,因此,我更加大胆参测,错误处在我对VIewController反复删除添加的操作上。好了,下面就说说步骤吧:
1,当然建立一个工程,在原有VIewController基础上,再添加三个ViewCOntroller,并将这三个ViewController的storyboard ID分别改为“page1”,“page2”,“page3”,同时向这三个子视图控制器中分别拖入imageVIew,并将image属性设置为supporting file中添加的图片的相应名称。(这每个子视图控制器的内容就是运行成果中每页显示的内容,当然,不只是imageVIew,我们还可以在每个子视图控制器中添加任意我们喜欢,希望看到的界面)
2,利用故事板的操作就是这些啦,其余的我们可以靠代码实现。分页显示需要“在一个父视图控制器中添加一个PageViewController分页控制器,然后分页控制器下面再加载所希望显示的子视图控制器”,在前面故事板中,我们只是设定了父视图控制和子视图控制器,因此在代码中,我们需要创建一个分页控制器。(前天晚上第一次做时,没有弄明白这一层关系啊)代码如下:
(1),.h文件:
#import <UIKit/UIKit.h>
@interface ViewController :UIViewController<UIPageViewControllerDataSource,UIPageViewControllerDelegate>
{
int pageIndex;
}
@property(nonatomic,strong)UIPageViewController *pageViewController;
@end
(2),.m文件:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[superviewDidLoad];
self.view.frame=CGRectMake(0,0,320.0,420.0);
//构建UIPageViewController实例,initWithTransitionStyle:定义翻页样式(翻书效果样式),navigationOrientation:定义翻页方向(水平方向)
self.pageViewController=[[UIPageViewControlleralloc]initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurlnavigationOrientation:UIPageViewControllerNavigationOrientationHorizontaloptions:nil];
self.pageViewController.delegate=self;
self.pageViewController.dataSource=self;
UIStoryboard *mainstoryboard=[UIStoryboardstoryboardWithName:@"Main"bundle:nil];
UIViewController *page1ViewController=[mainstoryboardinstantiateViewControllerWithIdentifier:@"page1"];
//第一个视图,作为pageViewController的首页,这句代码相当于代码:
//NSArray *viewControllers=[NSArray arrayWithObject:page1ViewController,nil];
NSArray *viewControllers=@[page1ViewController];
//设定首页显示视图,显示视图与书脊有关
[self.pageViewControllersetViewControllers:viewControllersdirection:UIPageViewControllerNavigationDirectionForwardanimated:YEScompletion:NULL];
//将pageViewController添加到父视图控制器中去
[selfaddChildViewController:self.pageViewController];
[self.viewaddSubview:self.pageViewController.view];
pageIndex=0;
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//返回当前视图控制器之前的视图控制器,用于上一页的显示
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{
pageIndex--;
if(pageIndex<0){
pageIndex=0;
returnnil;
}
// Direction Forward=Forward Before;
//获取故事板
UIStoryboard *mainStoryboard=[UIStoryboardstoryboardWithName:@"Main"bundle:nil];
//根据索引号,获取子视图控制器的ID,
NSString *pageID=[NSStringstringWithFormat:@"page%i",pageIndex+1];
//根据ID,获取子视图控制器
UIViewController *pvController=[mainStoryboardinstantiateViewControllerWithIdentifier:pageID];
return pvController;
}
//返回当前视图控制器之后的视图控制器,用于下一页的显示
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{
pageIndex++;
if(pageIndex>2){
pageIndex=2;
returnnil;
}
// Direction Forward=Forward After;
UIStoryboard *mainstoryboard=[UIStoryboardstoryboardWithName:@"Main"bundle:nil];
NSString *pageID=[NSStringstringWithFormat:@"page%i",pageIndex+1];
UIViewController *pvController=[mainstoryboardinstantiateViewControllerWithIdentifier:pageID];
return pvController;
}
-(UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation{
//单页翻动:
self.pageViewController.doubleSided=NO;
//定义书脊位置在书的最左边,书将从右向左翻动
returnUIPageViewControllerSpineLocationMin;
}
@end
3,运行结果就能像翻书一样查看图片咯(次例书脊在左);
4,在这个例子的基础上,我改了一个小小操作,就是在不自定义PageVIewController,直接在故事板中拖入一个PageVIewController控件,将其stroyboard ID命名为“pageview”(这个storyboard ID可以从其字面意思理解到“在故事板中的地址”,我们可以根据这个地址在故事板中找到相应的视图控制器)。
代码主要是下面这段不同啦,我们不需要在.h文件中自定义pageViewController控件,更不需要在.m中对其进行初始化,要做的就是根据storyboard ID找到故事板中的分页视图控制器。
- (void)viewDidLoad
{
[superviewDidLoad];
self.view.frame=CGRectMake(0,0, 320.0,420.0);
UIStoryboard *mainstoryboard=[UIStoryboardstoryboardWithName:@"Main"bundle:nil];
UIPageViewController *pageViewController=[mainstoryboardinstantiateViewControllerWithIdentifier:@"pageview"];
pageViewController.delegate=self;
pageViewController.dataSource=self;
UIViewController *page1ViewController=[mainstoryboardinstantiateViewControllerWithIdentifier:@"page1"];
//第一个视图,作为pageViewController的首页,这句代码相当于代码:
//NSArray *viewControllers=[NSArray arrayWithObject:page1ViewController,nil];
NSArray *viewControllers=@[page1ViewController];
//设定首页显示视图,显示视图与书脊有关
[pageViewController setViewControllers:viewControllersdirection:UIPageViewControllerNavigationDirectionForwardanimated:YEScompletion:NULL];
//将pageViewController添加到父视图控制器中去
[selfaddChildViewController:pageViewController];
[self.viewaddSubview:pageViewController.view];
pageIndex=0;
// Do any additional setup after loading the view, typically from a nib.
}