如果您使用 Google 搜索,我相信您可以找到一些教程,但这应该让您开始尝试自己的实现。我从“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 个,因为页面视图控制器会创建当前样式以及上一个和下一个样式,以加快加载速度。
如您所见,我只对模板提供给您的代码进行了一些小改动,以便显示适合您目的的图像数组。与在导航控制器中使用控制器堆栈相比,为您的应用程序构建这样的结构将更加节省内存。