您的位置:首页 > 产品设计 > UI/UE

iOS基础开发-UI基础之UIScrollview

2016-05-16 22:51 555 查看
一个手机屏幕显示的内容是有限,当内容数据多,在可是View中就展示不完全,这时候就需要用到UIScrollView控件.UIScrollView会隐藏超出内容的部分,相当于UIScrollView默认设置了clipBounds为YES.

有时候,我们可能添加了UIScrollView控件,但是它无法滚动,原因可能有下面几个:

1.没有设置contentsize,或者设置的content size小于或者等于scrollView的尺寸;

2.设置scrollEnable = NO;

3.userinteractionEnable = NO;(这方法有别去上一个,这个是是否与用户交互)

上面说到的两种方法都可能造成不能滚动,那么到底他们的区别是什么?scrollEnable仅仅是不能滚动,其他事情依旧能够响应,而userinteractionEnable禁止任何交互事件.包括其子控件的所有交互事件都会被禁止.需要注意的一点,UIScrollView的frmae决定了可视范围,contentsize决定了内容滚动的范围,滚动式内容进行滚动,UIScrollView控件本身是不滚动的

UIScrollView的常见属性:

>bounces 弹簧效果

self.scrollViewbounces = NO;//去除弹簧效果

>alwaysBounceVertical alwaysBounceHorizontal

不管有没有contentSize,总是有弹簧效果

作用:用来做下拉刷新和上拉刷新的

>indicatorStyle

设置滚动条的颜色

>self.scorllView.subViews

查看UIScrollView中有多少个子控件

>contentOffSet

控制内容的滚动,也称为内容的偏移量

偏移量 = contentSize左上角 与 内容左上角的差值

UIScorllView的左上角 - contentSize左上角

设置滚动条的颜色

控制内容的滚动,也称为内容的偏移量

偏移量 = contentSize左上角 与 内容左上角的差值

UIScorllView的左上角 - contentSize左上角

>self.scrollViewbounces = NO;//去除弹簧效果

查看UIScrollView中有多少个子控件

设置内边距(增加额外的滚动区域)

>contentInset

设置内边距(增加额外的滚动区域)

不管有没有contentSize,总是有弹簧效果

作用:用来做下拉刷新和上拉刷新的

UIScrollView的delegate

代理的作用

监听器的作用,可以监听UIScrollView的各种事件(只要成为UIScrollView的代理,就能监听UIScrollView的行为)

当UIScrollView发生一系列行为时,就会告诉代理(滚动了、点击了、拖拽了)

代理的使用规律

代理一般是当前控制器对象

代理id类型,且必须是弱指针

代理协议格式

控件类名Delegate,比如:UIScrollViewDelegate,UITextFieldDelegate

代理方法

方法名一般以控件开头.比如UIScrollView的代理一般以scrollView开头

监听UIScrollView各种行为的三大步骤

设置scrollView的delegate(代理)为控制器对象

控制器要遵守协议UIScrollViewDelegate协议

控制器要实现UIScrollViewDelegate协议里面的方法

UIScrollView常见的代理方法

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

-(void)scrollViewWillEndDragging..

-(void)scrollViewDidEndDragging...

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

监听器的作用,可以监听UIScrollView的各种事件(只要成为UIScrollView的代理,就能监听UIScrollView的行为)

当UIScrollView发生一系列行为时,就会告诉代理(滚动了、点击了、拖拽了)

代理一般是当前控制器对象

代理id类型,且必须是弱指针

代理协议格式

控件类名Delegate,比如:UIScrollViewDelegate,UITextFieldDelegate

代理方法

方法名一般以控件开头.比如UIScrollView的代理一般以scrollView开头

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

-(void)scrollViewWillEndDragging..

-(void)scrollViewDidEndDragging...

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

scrollView的代理可以是任何类型的OC 对象

设置scrollView的delegate(代理)为控制器对象

控制器要遵守协议UIScrollViewDelegate协议

控制器要实现UIScrollViewDelegate协议里面的方法

代理的注意点

scrollView的代理可以是任何类型的OC 对象

代理一定是weak

利用UIScrollView实现分页

01-开启分页功能

往scrollView中添加五张图片

设置contentSize

开启分页功能

self.scrollView.pageEnable = YES;

分页的标准:以scrollView的尺寸为一页

02-设置pageControl(监听scrollView的滚动设置页码)

第一种:scrollView停止滚动改变页码

第二种:scrollView滚动过程中改变页码

往scrollView中添加五张图片

设置contentSize

开启分页功能

self.scrollView.pageEnable = YES;

分页的标准:以scrollView的尺寸为一页

03-设置定时器

注意事项

NSTimer是一次性的,要么持续工作,一旦停止工作就无法再次使用

存在的问题?

拖入UITextView,不断地拖拽框中的文字,定时器不工作了

原因:和线程相关,线程就是用来执行任务的,同一时间只能做一件事情

如何解决?

修改NSTimer在NSRunLoop中的模式:NSRunLoopCommonModes

主线程不管在处理什么操作,都会抽时间处理NSTimer

注意事项

NSTimer是一次性的,要么持续工作,一旦停止工作就无法再次使用

存在的问题?

拖入UITextView,不断地拖拽框中的文字,定时器不工作了

原因:和线程相关,线程就是用来执行任务的,同一时间只能做一件事情

如何解决?

修改NSTimer在NSRunLoop中的模式:NSRunLoopCommonModes

主线程不管在处理什么操作,都会抽时间处理NSTimer

第一种:scrollView停止滚动改变页码

第二种:scrollView滚动过程中改变页码

04-UIScrollView的分页-封装

自定义控件(XIB)

新建:PageView

新建XIB文件描述PageView

给子控件设置数据

设置图片

提供imageNames属性,在pageView中实现set方法

-拷贝原来的代码

-根据图片名数据创建对应的imageView

-设置scrollView的contentSize

-在awakeFromNib中设置pageControl

-设置pageView成为scrollView的代理

存在的问题?

内部的子控件不会跟随父控件伸缩(学完屏幕适配可以轻松解决)

多次传入新图片,出现叠加效果

解决?

让self.scrollView.subViews数组中的所有控件都执行removeFromSuperView方法

[self.scrollView.subViews makeObjectsPerformSelector:@selector(removeFromSuperView)];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: