iOS边练边学--UIScrollView的属性简单使用,代理的简单介绍以及内容缩放
一、什么是UIScrollView
*移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也是相当有限
*当展示的内容较多,超出一个屏幕时,用户可通过滚动收拾来查看屏幕以外的内容
*普通的UIView不具备滚动功能,不适合显示过多内容
*UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容
二、UIScrollView显示内容的小细节
*超出UIScrollView边框的内容会被自动隐藏
*用户可以用收拾拖动来查看超出边框并被隐藏的内容
三、UIScrollView的常见属性
@property(nonatomic) CGPoint contentOffset;--这个属性用来表示UIScrollView滚动的位置
@property(nonatomic) CGSize contentSize;--这个属性用来表示UIScrollView的内容的尺寸,滚动范围(能滚多远)
@property(nonatomic) UIEdgeInsets contentInset;--这个属性能够在UIScrollView的四周增加额外的滚动区域,一般用来避免scrollView的内容被其他控件挡住
**************************图片实例***********************************
**************************图片实例***********************************
@property(nonatomic) BOOL bounces;--设置UIScrollView是否需要弹簧效果
@property(nonatomic,getter = isScrollEnabled) BOOL scrollEnabled;--设置UIScrollView是否能滚动
@property(nonatomic) BOOL showsHorizontalScrollIndicator;--是否显示水平滚动条
@property(nonatomic) BOOL showsVerticalScrollIndicator;--是否显示垂直滚动条
关于scrollView中滚动条的注意事项:在scrollView中滚动条也是控件,在类似以下案例中,要注意滚动条的存在
代码示例:
- (void)viewDidLoad {
[super viewDidLoad];
// 定义一行中的列数
int count = ;
CGFloat w = ;
CGFloat h = ;
CGRect rect;
for (int i = ; i < ; i++) { // 循环加控件
UIView *view = [[UIImageView alloc] init];
view.backgroundColor = [UIColor redColor];
NSInteger row = i / count; // 所在行
NSInteger cols = i % count; // 所在列
CGFloat x = cols * (w + ); // 列决定x
CGFloat y = row * (h + ); // 行决定y
view.frame = CGRectMake(x, y, w, h);
[self.scrollView addSubview:view];
if (i == ) {
// 将最后一个格子的rect记录下来
rect = view.frame;
}
}
// 最好不要直接拿到所谓的最后一个控件,来算得scrollView的可视区的高度,因为scrollView中多了两个滚动条控件,最后拿到的控件不一定是自己想要的
// UIView *lastView = [self.scrollView.subviews lastObject];
// CGFloat contentH = lastView.frame.origin.y + lastView.frame.size.height;
// 或者将滚动条的这两个属性设置为NO,但是此方法用户体验不好
// self.scrollView.showsHorizontalScrollIndicator = NO;
// self.scrollView.showsVerticalScrollIndicator = NO;
// 获得y坐标的最大值
CGFloat contentH = CGRectGetMaxY(rect);
// 设置scrollview的可视范围
self.scrollView.contentSize = CGSizeMake(, contentH);
}
四、UIScrollView中的代理
*成为代理的条件
*一般情况下,就设置UIScrollView所在的控制器为UIScrollView的delegate
*设置控制器为UIScrollView的delegate有2种方法:
1>通过代码(self就是控制器)-----self.scrollView.delegate = self;
2>通过storyboard拖线(右击UIScrollView)
*然后,控制器应该遵守UIScrollViewDelegate协议
*对其中的四个代理方法进行简单介绍
#pragma mark - <UIScrollViewDelegate> 四个代理方法的介绍 - (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// 只要滚动就调用
} -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
// 开始拖拽的时候调用
} -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
// 结束拖拽的时候调用
} -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
// (减速完毕)停止滚动的时候调用
}
五、内容缩放
iOS边练边学--UIScrollView的属性简单使用,代理的简单介绍以及内容缩放的更多相关文章
- iOS边练边学--UIScrollView和xib文件实现简单分页+定时器初使用
一.xib文件构成 二.自定义控件类(xib文件与自定义控件类的文件名字相同,并且将xib文件中父类控件的类名改成自定义控件类的名称) ***********自定义控件类需要的属性********** ...
- iOS边练边学--UITableViewCell的常见属性设置
// 取消选中的样式(常用) 让当前 cell 按下无反应 cell.selectionStyle = UITableViewCellSelectionStyleNone; // 设置选中的背景色,U ...
- iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信
一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...
- iOS边练边学--CALayer,非根层隐式动画,钟表练习
一.CALayer UIView之所以能显示在屏幕上,完全是因为他内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性 ...
- iOS边练边学--应用数据存储的常用方式(plist,Preference,NSKeyedArchiver)其中的三种
iOS应用数据存储的常用方式: XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3--这里暂且不讲 Core D ...
- iOS边练边学--iOS中的XML数据解析
XML的解析方式 SAX 大小文件都可以 NSXMLParser DOM 最好是小文件 GDataXML NSXMLParser的用法 创建解析器来解析 // 创建XML解析器 NSXMLParser ...
- iOS边练边学--Http网络再学习,简单介绍
一.URL 什么是URL URL中常见的协议 二.Http Http的基本通信过程 发送Http请求的方法 GET 和 POST 对比 GET 和 POST 的选择 三.iOS中的Http学习 iOS ...
- iOS边练边学--父子控件之作为导航控制器的子类产生的问题以及网易新闻练习
一.导航控制器的子类 作为导航控制器的子类,并且是导航控制器子类中的第一个,系统会默认给子控件添加EdgeInsert属性,把导航栏的宽度挤出来.但是系统只会默认修改第一个. 解决办法1:系统帮忙给第 ...
- iOS边练边学--UIGestureRecognizer手势识别器简单介绍
iOS 3.2之后,苹果退出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度. 一.UIGestureRecognizer UIGestureRe ...
随机推荐
- 程序开发使用地图API时需注意的问题(转)
最近在做一个基于地点提醒的移动应用,当初考虑大家都心知肚明的原因,谨慎的选择了百度地图,现在想想其实完全没有必要,好的应用本来就不分国界的,最后可能还是得换回Google地图.毕竟Google地图在技 ...
- 浅析I/O模型
以下是本文的目录大纲: 一.什么是同步?什么是异步? 二.什么是阻塞?什么是非阻塞? 三.什么是阻塞IO?什么是非阻塞IO? 四.什么是同步IO?什么是异步IO? 五.五种IO模型 六.两种高性能IO ...
- java中你确定用对单例了吗?
作为程序员这样的特殊物种来说,都掌握了一种特殊能力就是编程思想,逻辑比較慎重,可是有时候总会忽略到一些细节,比方我,一直以来总认为Singleton是设计模式里最简单的,不用太在意,然而就是由于这样的 ...
- 局域网不同用户同时登录同一个网站,会出现session乱窜的问题
出现这种问题的情景再现: 1.有一部分人访问网站会出现session乱窜的问题. 2.这部分人是在同一个局域网中. 3.不同菜单看到的信息是不同人的,或者同一个菜单翻页时有的时候看到的是自己的数据,有 ...
- SqlMapConfig.xml中的setting属性 Ibatis mybatis
<settingscacheModelsEnabled="true"lazyLoadingEnabled="false"enhancementEnable ...
- django官方文档学习-入门part3创建用户视图
一.官方的约定: 1.在django中有一个约定.那就是每一个app自己的模板最好放在自己app目录下的templates子目录下. 但是这个还没有完成.最好还是在templates目录下加一个app ...
- session和cookie的联系
前提: 一.cookie机制 正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie.然而纯粹的客户端脚本如J ...
- CentOS的字符集locale的设置
LANGLC_*的默认值,是最低级别的设置,如果LC_*没有设置,则使用该值.类似于 LC_ALL. LC_ALL它是一个宏,如果该值设置了,则该值会覆盖所有LC_*的设置值.注意,LANG的值不受该 ...
- Viso Professional 2013版本激活(office 系列产品 -- visio 2013 / project 2013 破解工具 - KMSpico)
背景: 环境是 win7, 64 bit 装了 visio 2013 , 可以却不能用它来画图,在网上找了一些破解工具,大都不能解决问题.网上不靠谱的广告型文章太多了,比较头痛. 所幸,终于找到正确的 ...
- 史上最全的CDN内容分发网络实战技巧(网络优化)
今天来给大家分享下关于 CDN 的东西,以及我自己的一些发现.一些个人的拙见.总共分为 3 个部分:原理.详解.各种坑. 首先说一下 CDN 的基本原理部分,主要分 4 块来描述:CDN 的由来.调度 ...