UI第十七节——UIScrollView
// 实例化一个ScrollView
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
scrollView.backgroundColor = [UIColor redColor];
// 把ScrollView添加到self.view上
[self.view addSubview:scrollView];
// 加载一张图片
UIImage *image = [UIImage imageNamed:@"macbook_overview_og.jpg"];
// 实例化一个ImageView,并设置它的大小和image的大小一致
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)];
imageView.image = image;
// 把ImageView添加到scrollView
[scrollView addSubview:imageView];
// 设置scrollView的contentSize属性
// 这个属性必须在大于scrollView.bounds.size才能滚动
scrollView.contentSize = image.size;
// 自动调整ScrollView的内容的内嵌(有NavigationBar的时候,内容的Top会内嵌64个点)
// self.automaticallyAdjustsScrollViewInsets = NO;
// 内容的内嵌
// scrollView.contentInset = UIEdgeInsetsMake(100, 100, 50, 50);
// 方向锁,如果打开的话,确定了一个方向去滚动之后,另一个方向就不能滚动了
scrollView.directionalLockEnabled = YES;
// 点击状态栏的时候,自动滚动到最上面
scrollView.scrollsToTop = NO;
#if 0
// 内容的偏移量,通常我们都是用它来控制显示(滚动)到哪里
// (100, 0)
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 2秒之后,滚动到右下角
[scrollView setContentOffset:CGPointMake(image.size.width-[[UIScreen mainScreen] bounds].size.width, image.size.height-[[UIScreen mainScreen] bounds].size.height) animated:YES];
});
#endif
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
CGRect rect = CGRectMake(800, 500, 300, 300);
// 让一个矩形的区域去滚动到屏幕显示的地方
[scrollView scrollRectToVisible:rect animated:YES];
});
// 滚动的开关
// scrollView.scrollEnabled = NO;
// 隐藏或显滚动的指示条
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
// 设置为NO之后就不能拖超出边界了
scrollView.bounces = NO;
}
#pragma mark - UIScrollViewDelegate
// 当UIScrollView滚动的时候会调用这个函数
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// NSLog(@"%@", NSStringFromCGPoint(scrollView.contentOffset));
// scrollView.dragging // 判断scrollView是否在拖拽
// scrollView.decelerating // 判断scrollView是否在减速的过程中
}
// 将要减速
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
NSLog(@"将要减速");
}
// 已经停止减速(滚动)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSLog(@"scrollView已经停下来了");
}
// 开始拖拽
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
NSLog(@"开始拖拽");
}
// 停止拖拽
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
NSLog(@"停止拖拽");
}
// 返回需要在ScrollView中实现缩放的View
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return [self.view viewWithTag:100];
}
UI第十七节——UIScrollView的更多相关文章
- 第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据
第一百二十七节,JavaScript,JSON数据类型转换,数据转换成字符串,字符串转换成数据 学习要点: 1.JSON语法 2.解析和序列化 前两章我们探讨了XML的结构化数据,但开发人员还是觉得这 ...
- 第三百九十七节,Django+Xadmin打造上线标准的在线教育平台—其他插件使用说,主题本地化设置
第三百九十七节,Django+Xadmin打造上线标准的在线教育平台—其他插件使用说,主题本地化设置 主题设置是在xadmin\plugins\themes.py这个文件 默认xadmin是通过下面这 ...
- 第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示
第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示 首先了解一下static静态文件与上传资源的区别,static静态文件里面一般防止的我们网站样式的文件, ...
- 第三百七十七节,Django+Xadmin打造上线标准的在线教育平台—apps目录建立,以及数据表生成
第三百七十七节,Django+Xadmin打造上线标准的在线教育平台—apps目录建立,以及数据表生成 apps目录建立 我们创建一个apps目录,将所有的app放到apps目录里去,这样方便管理,也 ...
- 第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中
第三百六十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)scrapy写入数据到elasticsearch中 前面我们讲到的elasticsearch( ...
- 第三百五十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码
第三百五十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码 scrapy-redis是一个可以scrapy结合redis搭建分布式爬虫的开 ...
- 第三百四十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—通过downloadmiddleware中间件全局随机更换user-agent浏览器用户代理
第三百四十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—通过downloadmiddleware随机更换user-agent浏览器用户代理 downloadmiddleware介绍中间件是 ...
- 第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS
第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS PhantomJS虚拟浏览器 phantomjs 是一个基于js的webkit内核无头浏览器 ...
- 第三百二十七节,web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求
第三百二十七节,web爬虫讲解2—urllib库爬虫 利用python系统自带的urllib库写简单爬虫 urlopen()获取一个URL的html源码read()读出html源码内容decode(& ...
随机推荐
- JCIP chap3 share objects
"同步"确保了操作的原子性执行,但它还有其它重要的方面:memory visibility.我们不但要确保当一个线程在使用一个对象的时候,其它线程不能修改这个对象,而且还要保证该线 ...
- [AR]Vumark(下一代条形码)
VuMark 准备知识 Vumark的说明: https://library.vuforia.com/articles/Training/VuMark https://library.vuforia. ...
- 【原】移动web页面给用户发送邮件的方法 (邮件含文本、图片、链接)
微信商户通有这么一个需求,用户打开H5页面后,引导用户到电脑下载设计资源包,由于各种内部原因,被告知无后台资源支持,自己折腾了一段时间找了下面2个办法,简单做下笔记. 使用mailto功能,让用户自己 ...
- 快速排序算法 quick sort的理解
最近做了一下算法的一些练习,感觉基础薄弱了,只是用一些已经有的东西来完成练习如quickSort(c++使用的时候是sort(起始位置,终止位置,比较函数),这个需要加头文件),但是不知道怎么推出来, ...
- python学习2
1.input()返回的是字符串, 如果想读入一个数字,应该用int()转化 2.循环的写法与C不同的地方就是,for while等写完之后在那一行后面要加上一个冒号,这是比较特殊的地方. 还有就是r ...
- 地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了
地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了 四叉树对于区域查询,效率比较高. 原理图
- ActiveMQ笔记(4):搭建Broker集群(cluster)
上一篇介绍了基于Networks of Borkers的2节点HA方案,这一篇继续来折腾Networks of Brokers,当应用规模日渐增长时,2节点的broker可能仍然抗不住访问压力,这时候 ...
- 工作邮件loop的用法
examples come from native speaker Put john in the loop about this. He will have good advice. Why hav ...
- insmod模块的几种常见错误
1. 与内核版本不一致 嵌入式开发时,模块编译时需要制定内核的路径,内核的版本信息会加入到模块文件中,如果目标板上运行的内核与模块中包含的内核版本对不上,加载就会出错,报如下错误: insmod i ...
- Fiddler抓包工具使用基础
官网下载Fiddler Fiddler的官方网站: www.fiddler2.com Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监 ...