一. 为什么要用UIScrollView
手机屏幕有限,但又想展示更多内容,就要用到UIScrollView来滚动屏幕。
二. 前驱知识
1. Frame属性
UIScrollView中的Frame属性代表可见的区域(屏幕内部的)
2. ContentSize属性(CGSize类型)
ContentSize属性代表可展示的所有区域(包括屏幕外部)(滚动范围)
三. 使用场景
1. 新闻轮播图(十分常用)
2.应用第一次加载的引导界面
3.大数据图表设计引擎中的图表滑动、照片展示
四. UIScrollView 的快速使用
1. 初始化视图
let scrollView = UIScrollView(frame: CGRect(x: 0, y: 50, width: 414, height: 200)) // Frame属性
scrollView.contentSize = CGSize(width: 414*5, height: 200) // ContentSize属性
scrollView.backgroundColor = .gray
view.addSubview(scrollView)
2. 其他属性
①indicatorStyle:滑动时在底部添加滑动光标
scrollView.indicatorStyle = .white // 添加白色光标
//scrollView.indicatorStyle = .black 黑色光标
//scrollView.indicatorStyle = .default 默认灰色广标
②bounces: 滑动到边缘时光标具有反弹效果
scrollView.bounces = true // false 光标就会很僵直 没有反弹
③isPagingEnabled: 分页效果 每次移动一个格
scrollView.isPagingEnabled = true
④contentOffset: (CGPoint)
contentOffset是UIScrollView当前显示区域的顶点相对于UIScrollView的frame的坐标。UIScrollView实际上分为两层-scrollView(滚动视图,用于滚动)和contentView(内容视图,用于展示内容)。
scrollView的坐标原点即为其frame规定的位置,而contentView的起始位置是以scrollView坐标原点为原点,所展示内容的左上角那个点的坐标,即为contentOffset,可看作contentView左上角相对于scrollView左上角的位移偏移量。
⑤bouncesZoom
类似于bounces属性,这个属性可以让用户的缩放操作超出最大或最小缩放级别,然后弹回。
五. 在UIScrollView 中添加控件
let lable = UILabel(frame: CGRect(x: 414, y: 0, width: 414, height: 50)) //坐标(x, y)决定 lable 在滚动视图中的位置
lable.textColor = .red
lable.text = "hello"
lable.backgroundColor = .green
scrollView.addSubview(lable)
滚动页面1
滚动页面2
六. 委托代理方法(delegate)
1. 要为UIScrollView设置代理
使含有UIScrollView 的 ViewController 遵循 UIScrollViewDelegate 协议,这里用到了扩展
extension ViewController: UIScrollViewDelegate {
}
2. delegate函数
①scrollViewDidScroll: 滚动时不停的回掉
精度很高 有一个重要的使用场景:打印滚动时坐标的偏移量
func scrollViewDidScroll(_ scrollView: UIScrollView) {
var x = scrollView.contentOffset.x
print("x = \(x)")
}
②scrollViewWillBeginDragging:当用户首次拖动时调用
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
<#code#>
}
③ scrollViewWillEndDragging: 将要结束拖动时
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
<#code#>
}
④ scrollViewDidEndDragging: 当用户的手指停止拖动,离开屏幕时
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { // Bool参数指明报告滚动到最后视图前是否要减速
<#code#>
}
⑤ scrollViewDidZoom:缩放过程中持续触发
func scrollViewDidZoom(_ scrollView: UIScrollView) {
<#code#>
}
其余列在代码框里:
//6.将要开始减速的时候触发
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
print("将要开始减速")
}
//7.已经结束减速完成的时候触发,速度为0,往往都是在这个方法中获取scrollView的contentOffset(很重要)
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
print("减速完成")
}
//8.给scrollView设置一个结束动画的时候触发,不指定动画不会触发
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
}
//9.返回scrollView上缩放的视图
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return scrollView.viewWithTag(200)
}
//10.将要开始缩放的时候触发
func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {
print("将要开始缩放")
}
//11.结束缩放的时候触发
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
print("结束缩放")
}
//12.设置点击状态栏的时候是否回到顶部
func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {
return true
}
//13.scrollView已经回到顶部的时候触发的方法
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
print("scrollView已经回到顶部")
}
网友评论