使用UIScrollView和UIPageControl做一个能够用手势来切换图片的效果
利用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;
}
使用UIScrollView和UIPageControl做一个能够用手势来切换图片的效果的更多相关文章
- 使用plupload做一个类似qq邮箱附件上传的效果
公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...
- 用pyqt5做一个能python程序能插入图片的ide
之前只是放到github上了,现在一想应该开源,大家想继续做好这个ide的都能从这里起步. #注意在.py文件相同目录下放一个1.png做测试图片 #本质就是用html来实现图片 #写在前面的话:这个 ...
- 微软云创益大赛获奖团队风采:做一个中国特色的.Net源代码社区
为了强化云技术,落地云应用,彰显云价值,微软(中国)携手中国计算机报举办了“微软Cloud OS第二届云创益大赛”.本届大赛历时111天,共吸引了6647位个人组选手回答了70,078道题,59支参赛 ...
- 扩展一个boot的插件—tooltip&做一个基于boot的表达验证
在线演示 本地下载 (代码太多请查看原文) 加班,加班加班,我爱加班··· 我已经疯了,哦也. 这次发一个刚接触boot的时候用boot做的表单验证,我们扩展一下tooltip的插件,让他可以换颜色. ...
- 用 JS 做一个数独游戏(二)
用 JS 做一个数独游戏(二) 在 上一篇博客 中,我们通过 Node 运行了我们的 JavaScript 代码,在控制台中打印出来生成好的数独终盘.为了让我们的数独游戏能有良好的体验,这篇博客将会为 ...
- 用UIScrollview做一个网易scrollviewbar
效果如上,点击出现的图片是用UIImageview添加上的,比较简陋 我用了两种方法,第一种是直接在viewcontroller里面写代码 第二种是用了一个类来封装这个scrollviewbar 对外 ...
- iOS:UI系列之UIScrollview和UIPagecontrol
转眼间,又是一天,就这样忙忙碌碌的一天一天的过着, 不过还好,不是浑浑噩噩的,也算是小有所成,劳有所获吧,嘿嘿! 好了,到了总结的时间啦, 下面就为大家简单讲解下我今天学习的内容吧,希望对各位都有所帮 ...
- UIPageControl的一个Demo
本篇文章只是记录了一个自定义UIPageControl 的制作,其实很简单的 源码在底部会奉上链接,还望多多交流,多多支持. 首先效果图如下: 首先先做一个UISCrollView // 建议这样 ...
- 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎
Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...
随机推荐
- B - Eleven
Problem description Eleven wants to choose a new name for herself. As a bunch of geeks, her friends ...
- 带"签名"的请求接口实现
废话少说,直接上代码(⊙﹏⊙) class Program { //签名证书 public static X509Certificate2 cerSigneCert; private static c ...
- 5.14web相关概念
1.软件架构 1.C/S:客户端/服务器端 2.B/S:浏览器/服务器端 2.资源分类 1.静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析如:html,cs ...
- React Component(dva)
Stateless Functional Components(3种方式) class App extends React.Component function App() const App= Re ...
- linux route命令的使用详解(转)
route命令用于显示和操作IP路由表.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.在Linux系统中,设置路由通常是 为了解决以下问题:该Linu ...
- Matlab数组创建
只用C语言,不用Matlab这种魔咒还是要打破的.Matlab是科学计算的常用工具,既然以前没用过,现在开始学吧...... 1. 向量的创建 1)直接输入: 行向量:a=[1,2,3,4,5] ...
- C#面对“重载”的Win 32 函数
在Win32 Api中有很多添加/设置函数在参数上支持多种不同类型的结构体.这些参数定义为LPVOID* 或者LPBYTE,LPVOID*一般由Win32 分配内存空间,在C#从通过System.In ...
- 【sqli-labs】 less7 GET - Dump into outfile - String (导出文件GET字符型注入)
使用此漏洞需要知道WEB程序的根路径并且MYSQL的secure-file-priv配置应为可写入该路径 添加单引号,发现错误被屏蔽 对应的SQL语句应为 ')) ... 字段还是3个 在数据库中执行 ...
- (转)Bootstrap 之 Metronic 模板的学习之路 - (1)总览
https://segmentfault.com/a/1190000006673582#articleHeader0 写在前面 bootstrap 的模板非常多,Envato 上有着各种各样的免费及付 ...
- dispatch_sync:As an optimization, this function invokes the block on the current thread when possible
两件事情: 1.是否是一个线程: 2.queue task 的目标线程是否有未完成的task. 模型:一个线程处理当前的task还有通过gc d派发来的待执行task. 猜测: 如果目标thread上 ...