一、什么是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的属性简单使用,代理的简单介绍以及内容缩放的更多相关文章

  1. iOS边练边学--UIScrollView和xib文件实现简单分页+定时器初使用

    一.xib文件构成 二.自定义控件类(xib文件与自定义控件类的文件名字相同,并且将xib文件中父类控件的类名改成自定义控件类的名称) ***********自定义控件类需要的属性********** ...

  2. iOS边练边学--UITableViewCell的常见属性设置

    // 取消选中的样式(常用) 让当前 cell 按下无反应 cell.selectionStyle = UITableViewCellSelectionStyleNone; // 设置选中的背景色,U ...

  3. iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信

    一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...

  4. iOS边练边学--CALayer,非根层隐式动画,钟表练习

    一.CALayer UIView之所以能显示在屏幕上,完全是因为他内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性 ...

  5. iOS边练边学--应用数据存储的常用方式(plist,Preference,NSKeyedArchiver)其中的三种

    iOS应用数据存储的常用方式: XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3--这里暂且不讲 Core D ...

  6. iOS边练边学--iOS中的XML数据解析

    XML的解析方式 SAX 大小文件都可以 NSXMLParser DOM 最好是小文件 GDataXML NSXMLParser的用法 创建解析器来解析 // 创建XML解析器 NSXMLParser ...

  7. iOS边练边学--Http网络再学习,简单介绍

    一.URL 什么是URL URL中常见的协议 二.Http Http的基本通信过程 发送Http请求的方法 GET 和 POST 对比 GET 和 POST 的选择 三.iOS中的Http学习 iOS ...

  8. iOS边练边学--父子控件之作为导航控制器的子类产生的问题以及网易新闻练习

    一.导航控制器的子类 作为导航控制器的子类,并且是导航控制器子类中的第一个,系统会默认给子控件添加EdgeInsert属性,把导航栏的宽度挤出来.但是系统只会默认修改第一个. 解决办法1:系统帮忙给第 ...

  9. iOS边练边学--UIGestureRecognizer手势识别器简单介绍

    iOS 3.2之后,苹果退出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度. 一.UIGestureRecognizer UIGestureRe ...

随机推荐

  1. 关于ftpshell脚本中mget中去除多余交互式提示的方法

    默认情况下ftp里面的交互式提示是开启的,平常如果下载多个文件时,这种提示很让人烦,如果是在shell脚本里面要从ftp服务器上一次mget多个文件,写个交互式很麻烦,最好是把这个交互式提示关掉. 进 ...

  2. go学习笔记(3) -- package fmt

    package fmt fmt包实现了格式化的I/O函数,这点类似C语言中的printf和scanf,但是更加简单,其中的格式“占位符”衍生自 C 占位符 一般占位符 布尔占位符 浮点数及其复合构成占 ...

  3. 查看python selenium 的api

    DOS窗口输入: python -m pydoc -p 4567 python -m pydoc : 打开pydoc模块,pydoc是查看python文档的首选工具 -p 4567: 在4567端口启 ...

  4. Access数据库的连接字符串

    <!-- Access2007 --> Provider=Microsoft.ACE.OLEDB.12.0;Data Source=data\myAccess_db.accdb;Persi ...

  5. Linux内存使用方法详细解析

    我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用. 一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存.这两个概念主要来自于linux内核的支持. Linux在 ...

  6. Go TCP网路程序编写

    client和server程序编写 面向长连接的编程 http://files.cnblogs.com/files/yyx1-1/Go_TCP.7z

  7. nginx实战六

    Nginx错误日志 https://coding.net/u/aminglinux/p/nginx/git/blob/master/log/error.md Nginx错误日志平时不用太关注,但是一旦 ...

  8. Comet入门及最简单的Java Demo

    在浏览网页的时候,假设有新的消息,怎样接收到?HTTP协议不能由server主动给client发送消息. 1.刷微博.逛论坛贴吧,想看最新的信息怎么办?F5刷新一下就OK了! 2.上面一种方式是被动的 ...

  9. sureface 屏幕残影问题官方解决方案 - 卸载显卡驱动

    您进入桌面,左下角微软图标(单击右键),选择设备管理器,点开“显示适配器”前面的小三角,找到“Intel(r) hd gRAPHICS 520”, 单击右键卸载,卸载的时候不要勾选“删除此设备的驱动软 ...

  10. Java:多线程,线程池,用Executors静态工厂生成常用线程池

    一: newSingleThreadExecutor 创建一个单线程的线程池,以无界队列方式运行.这个线程池只有一个线程在工作(如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它.)此线程池 ...