如何设置UIPageViewController

时间:2014-06-21 14:46:54

标签: ios xcode uipageviewcontroller

我一直在寻找有关UIPageViewController设置的教程,因为有人建议不使用我的导航控制器,而是使用PageView。我也在左右使用滑动手势,但我还没有在网上找到关于通过故事板(或至少多数故事板)设置UIPageViewController的好教程。

我列出了我目前正在处理的内容:http://imgur.com/a0iuFNW

任何关于PageViewController的设置以及随后的控制器的帮助都将非常感谢!

感谢您在高级

中提供的帮助

1 个答案:

答案 0 :(得分:0)

我确定你可以在谷歌找到一些教程,但这应该让你开始尝试自己的实现。我从" Page-Base Application"开始创建了一个新项目。模板。您应该学习一些代码,让您尝试理解它的作用(以及阅读Apple关于UIPageViewController的文档)。

该项目创建了多个对象。 RootViewController创建页面视图控制器并将其添加为子视图控制器。对于我的测试应用程序,我没有更改此文件中的任何内容,只是将页面视图控制器的转换样式更改为UIPageViewControllerTransitionStyleScroll(而不是页面卷曲,但您也应该尝试原始值以查看它的外观)

ModelController类包含模型,在您的情况下,它将是一个图像名称数组(或者我所拥有的名称片段)。此类实现处理页面翻转的页面视图控制器数据源方法。我将该类中的init方法更改为

- (id)init {
    if (self = [super init]) {
        _pageData = @[@"1", @"2", @"3", @"4", @"5", @"6"]; // my images are named img1.JPG, img2.JPG, etc. I will use these numbers to construct the path to my files in the bundle
    }
    return self;
}

因此,您可以看到模型只是一个数字字符串数组(每个图像一个数字)。根据图像的命名方式,您可能需要尝试不同的操作。在页面之间滑动时,此数组的索引将递增或递减,并且数组中的值将传递给DataViewController,并转换为其dataObject属性。

DataViewController是实际显示您的内容的控制器。它是故事板中的正确控制器。我通过在顶部添加导航栏来修改其视图,以便我们可以输入标题和按钮(转到提示视图控制器),并将UIView子视图替换为占据导航栏下整个屏幕的UIImageView。我将IBOutlets制作成了图像视图和导航栏。这是该控制器的已更改的.h文件,

@interface DataViewController : UIViewController

@property (strong, nonatomic) NSString  *dataObject;

最后,在.m文件中,我看起来像这样,

@interface DataViewController ()
@property (weak,nonatomic) IBOutlet UINavigationBar *bar;
@property (weak,nonatomic) IBOutlet UIImageView *iv;
@end

@implementation DataViewController


- (void)viewDidLoad{
    [super viewDidLoad];
    UINavigationItem *titleItem = self.bar.items[0];
    titleItem.title = [NSString stringWithFormat:@"Course Guide %@",self.dataObject];
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"img%@", self.dataObject] ofType:@"JPG"];
    self.iv.image = [UIImage imageWithContentsOfFile:imagePath];
}

-(void)dealloc {
    NSLog(@"in dealloc");
}

我使用initWithContentsOfFile:根据传递给dataObject的数量创建图像(而不是imageNamed:因为它不会缓存图像)。我实现了dealloc来说明这样一个事实:当你在页面中来回滑动时,控制器被释放,从而保持你的内存占用空间很小。如果转换样式是页面卷曲,则控制器一旦离开屏幕就会被释放,因此一次只能存在多个控制器。如果样式是滚动的,那么一次存在3个,因为页面视图控制器创建当前的一个以及前一个和下一个以使加载更快。

正如您所看到的,我只对模板提供的代码进行了一些小的更改,以便显示适合您目的的图像数组。对于您的应用程序,这样的结构将比使用导航控制器中的堆栈控制器更高效。