利用UIScrollView的滚动效果来实现,先上图:

实现过程是:在viewController里先增加UIScrollView和UIPageControl:

-(void) loadView {
[super loadView];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320,480)];
UIPageControl* pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 438, 320, 42)];
self.scrollView = scrollView;
self.pageControl = pageControl;
self.pageControl.opaque = 1;
[self.pageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:self.scrollView];
[self.view addSubview:self.pageControl]; }

然后来初始化UIScrollView:

- (void)viewDidLoad
{
[super viewDidLoad]; self.contentList = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
NSMutableArray* controllers = [[NSMutableArray alloc] init];
for (unsigned i = 0 ; i < kNumberOfPages; i++) {
[controllers addObject:[NSNull null]];
} self.viewControllers = controllers;
self.scrollView.pagingEnabled = YES; //contentSize是内容的宽度
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width*kNumberOfPages,
self.scrollView.frame.size.height); self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.showsVerticalScrollIndicator = NO;
self.scrollView.scrollsToTop = NO;
self.scrollView.delegate = self; self.pageControl.numberOfPages = kNumberOfPages;
self.pageControl.currentPage = 0; [self loadScrollViewWithPage:0];
[self loadScrollViewWithPage:1];
// Do any additional setup after loading the view.
} //UserImageViewController里仅仅有一个UIImageView
-(void) loadScrollViewWithPage:(int)page{
if (page < 0) {
return;
}else if(page >= kNumberOfPages) {
//do some thing,like jump to other screen CalendarViewExample* calendarView = [[CalendarViewExample alloc] init];
[self presentViewController:calendarView animated:YES completion:^{}];
return;
} UserImageViewController* controller = [self.viewControllers objectAtIndex:page];
if ((NSNull*)controller == [NSNull null]) {
controller = [[UserImageViewController alloc] init];
[self.viewControllers replaceObjectAtIndex:page withObject:controller];
} if (controller.view.superview == nil) {
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
controller.view.frame = frame;
[self.scrollView addSubview:controller.view]; NSString* name =[self.contentList objectAtIndex:page];
NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"jpg"];
controller.numberImage.image = [UIImage imageWithContentsOfFile:path]; }
}

假设用手指来滚动的时候:

-(void) scrollViewDidScroll:(UIScrollView *)scrollView{
if (pageControlUsed) { return;
} CGFloat pageWidth = scrollView.frame.size.width;
//page表示当前滚动哪一页的标识
int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth)+1; self.pageControl.currentPage = page; [self loadScrollViewWithPage:page-1];
[self loadScrollViewWithPage:page];
[self loadScrollViewWithPage:page+1]; } -(void) scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
pageControlUsed = NO;
} -(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
pageControlUsed = NO;
}

然后假设切换到下一页:

-(void) changePage:(id)sender{
int page = self.pageControl.currentPage;
NSLog(@"chanepage page=%d",page); [self loadScrollViewWithPage:page-1];
[self loadScrollViewWithPage:page]; CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width*page;
frame.origin.y = 0;
[self.scrollView scrollRectToVisible:frame animated:YES]; pageControlUsed = YES;
}

代码能够在http://download.csdn.net/detail/baidu_nod/7547659下载

最新文章

  1. quartz.net插件类库封装(含源码)
  2. vulcan测试记录
  3. JavaScript中的apply和call函数详解(转)
  4. ThinkPHP框架里隐藏index.php
  5. 【转】升级Xcode6.3插件失效解决办法
  6. js的动态加载、缓存、更新以及复用
  7. linux下安装mysql数据库与相关操作
  8. 对线性回归,logistic回归和一般回归的认识
  9. zabbix邮件报警脚本(Python)
  10. nginx -- nginx平台初探(100%)
  11. 解决一个maven在eclipse中M2_HOME不能调整的问题
  12. SharePoint 2016 配置应用程序商店
  13. 转:Linux中文显示乱码?如何设置centos显示中文
  14. 2个监听器+ dialog + replysubject + extends
  15. MYSQL mybatis
  16. [Leetcode 39]组合数的和Combination Sum
  17. python基础知识11---函数1
  18. 【shell编程】之基础知识-语法
  19. Java基础之—反射
  20. linux中fork函数详解(转)

热门文章

  1. POJ 3635 优先队列BFS
  2. indeed 4.22 第一次网测
  3. Coursera公开课-Machine_learing:编程作业6
  4. 数据库操作通用函数,增强可重复利用性能C#,asp.net.sql2005
  5. Ajax 传递json字符串到客户端时报 Internal server error
  6. ios 指纹识别解锁
  7. python--6、re模块
  8. (转)vuex2.0 基本使用(3) --- getter
  9. JAVA可能问的几个面试题问题及问题的标准答案
  10. C# Cookies设置和读取