UIPageViewController 的简单使用
来源:互联网 发布:用户生命周期算法 编辑:程序博客网 时间:2024/05/29 05:56
这几天一直在研究一个类似书本翻页的效果,(即书脊(spine)在中间的效果)
实现书本那样翻页的效果就这么简单,想要实现单页的就只需把UIPageViewControllerSpineLocationMid改成UIPageViewControllerSpineLocationMin,然后把NSArray *viewControllers = [NSArray arrayWithObjects:firstViewController, nil];改成这样即可。是不是比code4app上德哪些简单。
这个效果我找了好几天,什么openGL,Layer,pageCurl效果都看过了,其中code4app,github上有许多类似的效果,都感觉不错,始终觉得UIPageViewController原生的类应该会有类似的解决办法,不容易啊!
好吧,废话不多说,直接上代码
//// ViewController.m// UIPageVIewControllerDemo//// Created by HaiBing on 15/7/26.// Copyright (c) 2015年 Nfschina. All rights reserved.//#import "ViewController.h"#import "ContentViewController.h"@interface ViewController ()<UIPageViewControllerDataSource,UIPageViewControllerDelegate>@property (nonatomic,strong)UIPageViewController *pageController;@property (nonatomic,strong)NSArray *pageContent;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; [self createContentPages];
// UIPageViewControllerSpineLocationMid这个参数设置书脊的位置,这里设置在中间
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:UIPageViewControllerSpineLocationMid] forKey:UIPageViewControllerOptionSpineLocationKey]; self.pageController = [[UIPageViewController alloc]initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:options]; self.pageController.dataSource = self; CGRect rect = self.view.bounds;// rect.size.width /= 2;// rect.origin.x = rect.size.width; [self.pageController.view setFrame:rect]; //既然书脊在中间,那肯定有两页,默认第一页和第二页 ContentViewController *firstViewController = [self viewControllerAtIndex:0]; ContentViewController *secondViewController = [self viewControllerAtIndex:1]; NSArray *viewControllers = [NSArray arrayWithObjects:firstViewController,secondViewController, nil]; [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:NO completion:nil]; [self addChildViewController:self.pageController]; [self.view addSubview:self.pageController.view]; }- (ContentViewController *)viewControllerAtIndex:(NSInteger)index{ if (self.pageContent.count == 0 || index >= self.pageContent.count) { return nil; } ContentViewController *dataViewController = [[ContentViewController alloc]init]; dataViewController.dataObject = [self.pageContent objectAtIndex:index]; return dataViewController;}- (NSInteger)indexOfViewController:(MoreViewController *)viewController{ return [self.pageContent indexOfObject:viewController.dataObject];}
//初始化数据,像tableView一样
- (void)createContentPages{ NSMutableArray *pagesStrings = [[NSMutableArray alloc]init]; for (int i = 0; i < 10; i++) { NSString *contentString = [NSString stringWithFormat:@"00%d.jpg",i]; [pagesStrings addObject:contentString]; } self.pageContent = [pagesStrings copy];}- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{ if (completed) { ContentViewController *previousViewController = (ContentViewController*)previousViewControllers.lastObject; previousViewController.view.hidden = true; }}- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{ NSInteger index = [self indexOfViewController:(ContentViewController *)viewController]; if (index == 0 || index == NSNotFound) { return nil; } index--; return [self viewControllerAtIndex:index]; }- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{ NSInteger index = [self indexOfViewController:(ContentViewController *)viewController]; if (index == NSNotFound) { return nil; } index++; if (index == self.pageContent.count) { return nil; } return [self viewControllerAtIndex:index];}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
然后再ContentViewController中
@interface ContentViewController : UIViewController@property (nonatomic,strong)id dataObject;@end
// ContentVIewCOntroller.m// UIPageVIewControllerDemo//// Created by HaiBing on 15/7/26.// Copyright (c) 2015年 Nfschina. All rights reserved.//#import "<span style="font-family: Arial, Helvetica, sans-serif;">ContentVIewCOntroller</span>.h"@interface MoreViewController ()@end@implementation <span style="font-family: Arial, Helvetica, sans-serif;">ContentVIewCOntroller</span>- (void)viewDidLoad { [super viewDidLoad]; NSString *imageName = (NSString *)_dataObject; CGRect rect = self.view.bounds; rect.size.width /= 2; UIImageView *imageView = [[UIImageView alloc]initWithFrame:rect]; imageView.image = [UIImage imageNamed:imageName]; [self.view addSubview:imageView];}- (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
实现书本那样翻页的效果就这么简单,想要实现单页的就只需把UIPageViewControllerSpineLocationMid改成UIPageViewControllerSpineLocationMin,然后把NSArray *viewControllers = [NSArray arrayWithObjects:firstViewController, nil];改成这样即可。是不是比code4app上德哪些简单。
好了,运行一下,测一测吧。
0 0
- UIPageViewController 的简单使用
- UIPageViewController的简单使用
- UIPageViewController的简单使用
- UIPageViewController的使用(Swift)
- iOS 5 新增的UIPageViewController 简单示例
- 使用 CGPDFDocument、CATiledLayer 和 UIPageViewController 做简单的 PDF 阅读器(一)
- iOS UI代码片段-UIPageViewController的使用
- iOS UIPageViewController - 使用总结
- UIPageViewController
- UIPageViewController
- UIPageViewController
- UIPageViewController
- UIPageViewController
- 如何使用Storyboard创建UIPageViewController
- 如何使用Storyboard创建UIPageViewController
- 使用UIPageViewController进行多页面管理 -
- 【译】如何使用Storyboard创建UIPageViewController
- UIPageViewController实现的左右滑动界面
- 规则引擎快速导出jsp页面实现计算器
- cmake 生成器(generator)
- Jquery的提示插件 jquery.poshytip.js
- sql面试题详解
- 串讲2
- UIPageViewController 的简单使用
- 怎样将应用程序最小化到托盘?
- 【剑指Offer面试题】 九度OJ1371:最小的K个数
- nodejs之socket.io模块——实现了websocket协议
- oracle glogin.sql 和login.sql使用
- 导入他人项目问题
- PASSION之MAVEN工程详解
- Android LayoutInflater深度解析 给你带来全新的认识
- os.walk 目录遍历