ios之UIScrollView
UIScrollView 类负责所有基于 UIKit 的滚动操作。
一、创建
- CGRect bounds = [ [ UIScreen mainScreen ] applicationFrame ] ;
- UIScrollView* scrollView = [ [UIScrollView alloc ] initWithFrame:bounds ];
当你创建完滚动视图后,你可以将另一个视图的内容粘合到滚动视图的空白页上。这回创建一个滚动的内容窗口:
- [ scrollView addSubview:myView];
你必须给出内容的实际大小,这样滚动视图才知道滚动的范围:
- scrollView.contentSize = myView.frame.size;
要开启缩放功能需要调整视图的两个属性,分别是maxinumZoomScale 和 mininumZoomScale 。这样就可以允许用户使用捏合手势调整内容大小:
- scrollView.maxinumZoomScale = 2.0;//允许放大2倍
- scrollView.mininumZoomScale = 0.5;//允许放大到0.5倍
要打开缩放功能,你还需要增加一个UIScrollViewDelegate 代理,通过一个名为 viewForZoomingScrollView
的方法做出响应。这个方法会返回进行缩放时所使用的 UIView 对象:
- scrollView.delegate = self;
- - (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView{
- <span style="white-space:pre"> </span>retutn myView;
- }
Tips:对于大规模数据,你可能会在最初使用一个低于实际大小(1.0)的缩放比例,让用户可以平滑地进行放大。
二、属性
除了上面用到的缩放属性外,滚动视图还有会让你多其他属性,可以对现实内容的行为进行微调。你可以对 UIScrollView 类进行多方位定制。下面这些属性是最常用的。
1.indicatorStyle
指定你希望使用的滚动条指示器的类型。默认行为是在白边界上绘制黑色的滚动条,这在大多数背景下都适用。可用风格如下:
- UIScrollViewIndicatorStyleDefault
- UIScrollViewIndicatorStyleBlack
- UIScrollViewIndicatorStyleWhite
2.contentOffset
一个CGPoint结构,其中包含有要显示内容相对于窗口左上角的偏移量。默认是从0×0开始的,但是你也可以将显示内容放在其他位置。
3.directionalLockEnabled
默认行为是允许用户同时进行横向和纵向的滚动。将这个属性设置为YES会导致将用户的滚动行为锁定成只允许横向或纵向进行,具体方向由初始姿态决定。
4.bounces
当用户抵达滚动区域边缘时,这个功能允许用户稍微拖动到边界外一点。当用户松开手指后,这个区域会像个橡皮筋一样,弹回到原位,给用户一个可见的提示,表示他已经到达了文档开始或结束位置。如果不想让用户的滚动范围能够超出可见内容,可以将这个属性设置为NO。
5.bouncesZoom
类似于bounces 选项,这个方法可以令用户的缩放操作超出最大或最小缩放级别,然后弹回到范围以内。如果你不想让用户能够超出你指定的范围进行缩放,将这个属性设置为NO。
6.pagingEnabled
当开启了分页功能时,滚动视图被分割成多个独立区段,二用户的滚动体验则变成了页面翻转,你可以用这个属性来进行页面翻转。
三、委托方法
可以赋予滚动视图一个委托,下列委托方法会在特定时刻收到通知。
- -(void)scrollViewDidScroll:(UIScrollView*)scrollView;//会在视图滚动时收到通知。包括一个指向被滚动视图的指针,从中可以读取contentOffset属性以确定其滚动到的位置。
- -(void)scrollViewWillBeginDragging:(UISCrollView*)scrollView;//当用户首次在某个方向上进行拖动时得到通知。这个方法会得到被作为参数传递的滚动视图指针,也同样可以从中读取 contentOffset 属性。
- -(void)scrollViewDidEndDragging:(UIScrollView*)scrollView willDecelerate:(BOOL)decelerate;
- //当用户抬起拖动到手指时得到通知。还会得到一个布尔值,知名报告滚动视图最后位置之前,是否需要减速。
- -(void)scrollViewWillBeginDecelerate:(UIScrollView*)scrollView;//当用户抬起手指而视图需要继续移动时,会收到通知。这个方法可以用来读取 contentOffset属性,从而判断出当用户抬起手指钱最后一次滚动到的位置,虽然这个位置并不会使滚动条的最终停止位置。
- -(void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView;//当上面提到的减速完毕、滚动视图停止时得到通知。收到这个通知的时刻,滚动视图的contentOffset属性会反映出滚动条最终停止的位置。
- -(void)scrollViewDidEndZooming:(UIScrollview*)scrollView withView:(UIView*)view atScale:(float)scale;//当用户对内容进行缩放时,会收到通知。缩放比例表示为一个浮点值,会作为参数传递进来。
- -(BOOL)scrollViewShouldScrollToTop:(UIScrollView*)scrollView;
- -(void)scrollViewDidScrollToTop:(UIScrollView*)scrollView;
- //当用户点出iPhone状态条时,滚动视图委托可以决定视图是否滚动回到开头。
OK,都总结完了,后面会写一个页面翻转的例子敬请关注。
| 属性 | 作用 |
| CGPoint contentOffSet | 监控目前滚动的位置 |
| CGSize contentSize | 滚动范围的大小 |
| UIEdgeInsets contentInset | 视图在scrollView中的位置 |
| id<UIScrollerViewDelegate> delegate |
设置协议 |
| BOOL directionalLockEnabled | 指定控件是否只能在一个方向上滚动 |
| BOOL bounces | 控制控件遇到边框是否反弹 |
| BOOL alwaysBounceVertical | 控制垂直方向遇到边框是否反弹 |
| BOOL alwaysBounceHorizontal | 控制水平方向遇到边框是否反弹 |
| BOOL pagingEnabled | 控制控件是否整页翻动 |
| BOOL scrollEnabled | 控制控件是否能滚动 |
| BOOL showsHorizontalScrollIndicator | 控制是否显示水平方向的滚动条 |
| BOOL showsVerticalScrollIndicator |
控制是否显示垂直方向的滚动条 |
| UIEdgeInsets scrollIndicatorInsets | 指定滚动条在scrollerView中的位置 |
| UIScrollViewIndicatorStyle indicatorStyle |
设定滚动条的样式 |
| float decelerationRate | 改变scrollerView的减速点位置 |
| BOOL tracking | 监控当前目标是否正在被跟踪 |
| BOOL dragging | 监控当前目标是否正在被拖拽 |
| BOOL decelerating | 监控当前目标是否正在减速 |
| BOOL delaysContentTouches | 控制视图是否延时调用开始滚动的方法 |
| BOOL canCancelContentTouches | 控制控件是否接触取消touch的事件 |
| float minimumZoomScale | 缩小的最小比例 |
| float maximumZoomScale | 放大的最大比例 |
| float zoomScale | 设置变化比例 |
| BOOL bouncesZoom | 控制缩放的时候是否会反弹 |
| BOOL zooming | 判断控件的大小是否正在改变 |
| BOOL zoomBouncing | 判断是否正在进行缩放反弹 |
| BOOL scrollsToTop | 控制控件滚动到顶部 |
ios之UIScrollView的更多相关文章
- iOS程序-UIScrollView的基本使用
iOS程序-UIScrollView的基本使用 scrollView的几个属性contentSize contentOffset contentInset 1.不能向上滑动很可能是因为contentS ...
- iOS开发UIScrollView的底层实现
起始 做开发也有一段时间了,经历了第一次完成项目的激动,也经历了天天调用系统的API的枯燥,于是就有了探索底层实现的想法. 关于scrollView的思考 在iOS开发中我们会大量用到scrollVi ...
- IOS中UIScrollView的详细使用
UIScrollView 是可以滚动的View 要想让UIScrollView可以滚动,必须设置UIScrollView的contentSize contentSize : 表示UIScrollVie ...
- iOS使用UIScrollView实现左右滑动UITableView和UICollectionView
在UIScrollView嵌套UITableView这篇文章是非常,但该项目的需求,需要嵌套UICollectionView,和UICollectionView和UITableView有非常多的不同, ...
- IOS中UIScrollView的contentSize、contentOffset和contentInset属性
IOS中,UIScrollView是可以滚动的视图,其中最常用的UITableView就是继承了UIScrollView. 跟所有的view一样,UIScrollView有一个frame属 性,同时, ...
- iOS 解决UIScrollView布局问题(布局受statusBar和NavigationBar影响)
iOS APP中有一个非常好用的功能,那就是当我们在滚动一个UIScrollView滚动了很远很远的时候,假如我们想让UIScrollView回到顶部,我们绝大多数人的做法就是慢慢慢慢的滚动UIScr ...
- iOS之UIScrollView循环滚动
#import "ViewController.h" #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #d ...
- IOS开发-UIScrollView陷阱之----删除所有子view, 滚动条(indicator) 消失
使用UIScrollView经常会执行清空视图的操作,我们普遍的做法是: for (UIView *subview in self.scrollView.subviews) { [subview re ...
- (转载)IOS中UIScrollView的属性和委托方法
http://www.jizhishusheng.com/?p=453 ---- 以下内容来自 UIScrollView 类负责所有基于 UIKit 的滚动操作一.创建 1. CGRect bou ...
- iOS开发-UIScrollView原理
UIScrollView在开发中是不可避免,关于UIScrollView都有自己一定的理解.滚动视图有两个需要理解的属性,frame和bounds,frame是定义了视图在窗口的大小和位置,bound ...
随机推荐
- 微信小程序云开发之云函数的创建与环境配置
云函数的使用与环境配置: 1.创建云函数 右键cloudfunctions文件选择新建Node.js云函数,云函数命名为updateVoice用于修改用户语音数量. 2.安装node.js及npm: ...
- 跳转到另一个APP
看看这个代码: http://code4app.com/codesample/4fcc512d6803fae60b000002 inApp跳转,不过需要Nimbus类库. 要跳转到另一个APP,需要另 ...
- web前端篇:html基础知识
目录 1.web前端: 2.HTML概述 2.1HTML介绍 2.2HTML在计算机中如何表现 3.HTML基础语法 4.练习题: 1.web前端: 什么是web? web 就是网页,是一种基于B/S ...
- vmware vSAN 入门
参考:https://docs.vmware.com/cn/VMware-vSphere/6.5/com.vmware.vsphere.virtualsan.doc/GUID-18F531E9-FF0 ...
- 线段树-单点更新-HDU 1166 敌兵布阵
#include <iostream> #include <cstdio> #include <string> #include <cstring> u ...
- Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured.
在搭建Hadoop集群的时候,遇到了这样的一个报错. 就在启动HDFS调用命令: start-dfs.sh 的时候,报错: 然后输密码就一直很奇怪,反正一直运行不成功. 百度了半天,确定是core-s ...
- 539 Minimum Time Difference 最小时间差
给定一个 24 小时制(小时:分钟)的时间列表,找出列表中任意两个时间的最小时间差并已分钟数表示.示例 1:输入: ["23:59","00:00"]输出: 1 ...
- QlikView入门
1.windows x64下载地址: http://d1cf4w4kkla6tb.cloudfront.net/qlikview/11.20/11718/_MSI/QlikViewDesktop_x6 ...
- 深度学习中GPU和显存分析
刚入门深度学习时,没有显存的概念,后来在实验中才渐渐建立了这个意识. 下面这篇文章很好的对GPU和显存总结了一番,于是我转载了过来. 作者:陈云 链接:https://zhuanlan.zhihu. ...
- jQuery取得/设置select的值
本来以为jQuery("#select1").val();是取得选中的值, 那么jQuery("#select1").text();就是取得的文本. 这是不正确 ...