什么是UIScrollView
- 概念
- 当展示内容较多,超出屏幕时,可以通过滚动手势查看屏幕以外的内容
- UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容
- 基本使用
- 将需要的内容添加到UIScrollView
- 设置contentSize,告诉UIScrollView滚动的范围
-
UIScrollView基本使用
-
contentSize
- 可滚动的尺寸: contentSize的尺寸 - scrollView的尺寸
弹簧效果
- 注意点:
不能滚动的原因
- 1.contentSize的尺寸小于等于scrollView的尺寸
- 2.没有设置contentSize
- 3.scrollEnabled的属性给禁止了(scrollView的属性)
- 4.userInteractionEnabled 是否为YES(父类的属性,任何控件都有这个属性)
-
scrollEnabled 和userInteractionEnabled的区别
-
注意点
:如果设置了userInteractionEnabled的属性为NO,scrollView以及其内部的所有子控件都不能和用户交互 -
细节补充:按钮
- disabled状态
- 注意点: 只有设置按钮的enabled的属性为NO才能达到disabled状态
- 设置userinteractionEnabled是达不到disabled状态的
-
-
clipsToBounds :超出边框的内容被裁减掉
- scrollView常见属性
-
bounces :Bool类型,默认是YES ,有弹簧效果
-
alwaysBounceVertical : 默认是NO
-
alwaysBounceHorizontal :默认是NO
- YES应用:下拉刷新
- UIActivityIndicatorView:系统默认有位置
- 调用startAnimation才能显示ActivityIndicatorView
- 不管有没有设置contentSize,总是有弹簧效果
-
showsVerticalScrollIndicator:显示竖直滚动条,默认为YES
-
showsHorizontalScrollIndicator:显示水平滚动条,默认为YES
-
-
注意
:不要通过索引去subViews这个数组中访问scrollView的子控件- scrollView的子控件
- imageView
- 水平滚动条UIImageView
- 垂直滚动条UIImageView
- scrollView的子控件
- scrollView重要属性
-
contentOffset
: 内容的偏移量- 作用:
- 1.控制scrollView内容偏移的位置
- 2.得知scrollView内容偏移的位置
- contentOffset = scrollView左上角 - 内容的左上角
- 作用:
-
- contenInset
-
contentInset
:内容的内边距 - UIEdgeInsetsMake();
- 作用:增加额外的滚动区域
- 应用:音乐播放器的歌词内容超过屏幕尺寸,从屏幕中间开始显示
-
-
监听UIScrollView的行为
(代理)-
设置代理属性:给属性赋值,即设置scrollView的代理对象为控制器
-
遵守协议<UIScrollViewDelegate> :写在类扩展里
-
实现代理方法
- 注意:
- scrollViewDidScroll:当scrollView正在滚动的时候调用,调用非常频繁
- didEndDragging:之后还在滚动的原因:惯性
- scrollViewWillBeginDragging:用户即将开始拖拽的时候调用
- scrollViewWilEndDragging:即将停止拖拽时候调用
- scrollViewDidEndDragging:已经停止拖拽时候调用
- scrollViewDidEndDecelerating:减速完毕的时候调用(完全静止,停止滚动)
-
代理使用注意
- 1.任何对象都可以作为scrollView的代理
- 自定义一个类Car,创建对象作为scrollView的代理
- 代理属性赋值之后创建的car对象就被销毁了
- 代理属性是weak修饰的,对象创建那一刻,没有强指针引用,所以一创建就销毁了
- 解决:创建一个属性,引用这个对象
- 一般情况下,让控制器成为scrollView的代理
- 2.代理属性为什么是weak修饰?
- strong会导致循环引用的问题
- 1.任何对象都可以作为scrollView的代理
-
- ios中常见控件的事件监听
-
UIButton
-
addTarget:self action:@selector(方法) forConrollEvents:事件
-
只要触发了事件,就会调用方法
-
addTarget:是UIControll的方法
-
系统自带的按钮没有代理属性,如果想使用代理监听,可以自定义按钮
-
touchUpInside事件
-
UIScrollView
- 设置代理:控制器成为scrollView的代理
- 遵守协议
- 实现代理方法
-
UISegmentedControll
- 这个控件不太常用,一般在公司中自定义
- initWithItem:有默认尺寸
- 继承UIControll,addTarget:方法监听
- valueChange事件
- selectedSegmentIndex:默认选中值
-
UITextField 文本输入框(特殊)
- connect Hardware Keyboard 勾选上
- 继承自UIControll,可以用addTarget:方法监听
- EditingDidBegin事件:开始编辑
- EditingChanged事件:文字改变
- EditingDidEnd事件:结束编辑
- 退出键盘:点击控制器的view退出键盘,结束编辑
- [self.view endEditing:YES]- 常用
- textField辞去第一响应者,resignFirstResponder
- [self.textField endEditing:YES]
- 有delegate属性,也可以使用代理方法监听
- 设置代理属性
- 遵守协议 UITextFieldDelegate
- 实现代理方法
- shouldChangeCharactersInRange:文字改变,YES
- 参数:string用户输入的内容
- 返回值:YES-允许用户输入,NO-禁止用户输入
- shouldChangeCharactersInRange:文字改变,YES
-
- 利用scrollView实现内容缩放
- 设置代理
- 遵守协议
- 实现代理方法
- viewForZoomingInScrollView:在scrollView里面哪一个view需要缩放(返回需要缩放的子控件),返回值为UIView
- 设置缩放比例
- maxmumZoomScale :最大缩放比例
- minmumZoomScale :最小缩放比例
- 注意:模拟器手指默认在中间显示
- 先按住option + shift,然后松开shift键 按鼠标左键
网友评论