使用UIScrollView和UIPageControl做一个能够用手势来切换图片的效果

时间:2022-08-29 09:20:50

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

使用UIScrollView和UIPageControl做一个能够用手势来切换图片的效果

实现过程是:在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. 微软云创益大赛获奖团队风采:做一个中国特色的&period;Net源代码社区

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

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

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

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

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

  6. 用UIScrollview做一个网易scrollviewbar

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

  7. iOS&colon;UI系列之UIScrollview和UIPagecontrol

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

  8. UIPageControl的一个Demo

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

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

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

随机推荐

  1. cygwin和mingw的区别

    之前由于做一些JNI的开发,安装了MinGW,最近有个项目需要用到cygwin,于是就有个疑问,这两个东西有什么区别?在网上看了些资料,在这里复制粘贴一下,以备后查. Unix下编译通过的C代码,在w ...

  2. JAVA类图

    类与类图 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能, ...

  3. emacs&colon; 文本输入中文件目录自动补全

    emacs: 文本输入中文件目录自动补全 // */ // ]]> UP | HOME   emacs: 文本输入中文件目录自动补全 Table of Contents 1 引言 2 补全过程演 ...

  4. android 界面设计基本知识

    一个好的APP不仅有美观,好看的界面,更需要良好的性能和稳定性.作为一名开发人员,需要理解界面设计原则并写出优秀的界面设计代码. 本章主要讲述基本控件的使用,界面布局及一些常用的界面设计属性. 1.常 ...

  5. css浮动

    一.浮动介绍 历史: 浮动属性产生之初是为了实现“文字环绕”的效果,让文字环绕图片在网页实现类似word中“图文混排”. 定位方式: 浮动让元素脱离正常流,向父容器的左边或右边移动直到碰到包含容器的边 ...

  6. ADF&lowbar;Starting系列7&lowbar;使用EJB&sol;JPA&sol;JSF通过ADF构建Web应用程序之创建UI View

    2013-05-01 Created By BaoXinjian

  7. Eclipse4&period;4&period;2手动安装Veloeclipse-2&period;0&period;8

    引言:     新安装了Eclipse最新版本 4.4.2 Luna(月神),由于项目中使用到了模板引擎Velocity,所以想安装一个Velocity插件, 在网上找了一下,看到Google的vel ...

  8. 提示找不到xml配置文件

    ClassPathXmlApplicationContext("applicationContext.xml")默认文件夹是resouerces,所以要把xml文件放在这个下面.

  9. 块和内嵌div和span

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. perties类的操作

    http://www.cnblogs.com/bakari/p/3562244.html perties类的操作   知识学而不用,就等于没用,到真正用到的时候还得重新再学.最近在看几款开源模拟器的源 ...