利用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下载

使用UIScrollView和UIPageControl做一个能够用手势来切换图片的效果的更多相关文章

  1. 使用plupload做一个类似qq邮箱附件上传的效果

    公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...

  2. 用pyqt5做一个能python程序能插入图片的ide

    之前只是放到github上了,现在一想应该开源,大家想继续做好这个ide的都能从这里起步. #注意在.py文件相同目录下放一个1.png做测试图片 #本质就是用html来实现图片 #写在前面的话:这个 ...

  3. 微软云创益大赛获奖团队风采:做一个中国特色的.Net源代码社区

    为了强化云技术,落地云应用,彰显云价值,微软(中国)携手中国计算机报举办了“微软Cloud OS第二届云创益大赛”.本届大赛历时111天,共吸引了6647位个人组选手回答了70,078道题,59支参赛 ...

  4. 扩展一个boot的插件—tooltip&做一个基于boot的表达验证

    在线演示 本地下载 (代码太多请查看原文) 加班,加班加班,我爱加班··· 我已经疯了,哦也. 这次发一个刚接触boot的时候用boot做的表单验证,我们扩展一下tooltip的插件,让他可以换颜色. ...

  5. 用 JS 做一个数独游戏(二)

    用 JS 做一个数独游戏(二) 在 上一篇博客 中,我们通过 Node 运行了我们的 JavaScript 代码,在控制台中打印出来生成好的数独终盘.为了让我们的数独游戏能有良好的体验,这篇博客将会为 ...

  6. 用UIScrollview做一个网易scrollviewbar

    效果如上,点击出现的图片是用UIImageview添加上的,比较简陋 我用了两种方法,第一种是直接在viewcontroller里面写代码 第二种是用了一个类来封装这个scrollviewbar 对外 ...

  7. iOS:UI系列之UIScrollview和UIPagecontrol

    转眼间,又是一天,就这样忙忙碌碌的一天一天的过着, 不过还好,不是浑浑噩噩的,也算是小有所成,劳有所获吧,嘿嘿! 好了,到了总结的时间啦, 下面就为大家简单讲解下我今天学习的内容吧,希望对各位都有所帮 ...

  8. UIPageControl的一个Demo

    本篇文章只是记录了一个自定义UIPageControl 的制作,其实很简单的   源码在底部会奉上链接,还望多多交流,多多支持. 首先效果图如下: 首先先做一个UISCrollView // 建议这样 ...

  9. 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎

    Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...

随机推荐

  1. EditPlus 2:用空格替换制表符

    打开软件点击菜单栏上的Tools(工具),在点击perferences(外观),再点击左边栏的File->Setting & Syntax(文件->设置与符号),再点击右栏的Tab ...

  2. POJ 1160 DP

    题目: poj 1160 题意: 给你n个村庄和它的坐标,现在要在其中一些村庄建m个邮局,想要村庄到最近的邮局距离之和最近. 分析: 这道题.很经典的dp dp[i][j]表示建第i个邮局,覆盖到第j ...

  3. java 微信api开发

    最近使用了一个很好的微信api框架,比较好使. 源码地址:https://github.com/chanjarster/weixin-java-tools/wiki 微信公众平台:微信公众平台开发文档 ...

  4. collectionView必须点击两次才跳转

    今天遇到一个很奇怪的现象:collectionView必须点击两次才能跳转.具体看代码: -(void)collectionView:(UICollectionView *)collectionVie ...

  5. Vue2-Editor 使用

    Vue-Editor底层采取的是quill.js,而quill.js采用的是html5的新属性classList,所以版本低于ie10会报错“无法获取未定义或 null 引用的属性‘confirm’” ...

  6. CentOS7.5 AndroidStudio Debug报错:insufficient permissions for device

    / ::: Launching instantapp $ adb push /home/vevi/AndroidStudioProjects/WeChatGod/app/build/outputs/a ...

  7. MatLab之HDL coder

    1 Workflow The workflow for applying HDL code generation to the hardware design process requires the ...

  8. [Intermediate Algorithm] - Arguments Optional

    题目 创建一个计算两个参数之和的 function.如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果. 例如,add(2, 3) 应该返回 5,而 ...

  9. kerberos认证原理---讲的非常细致,易懂

    前几天在给人解释Windows是如何通过Kerberos进行Authentication的时候,讲了半天也别把那位老兄讲明白,还差点把自己给绕进去.后来想想原因有以下两点:对于一个没有完全不了解Ker ...

  10. logging模块-logging.basicConfig、logger.setLevel、handler.setLevel优先级

    logging.basicConfig < handler.setLevel < logger.setLevel 1.脚本中没有配置logger.setLevel会使用handler.se ...