UIScrollView用于滚动展示内容信息。
1.创建UIScrollView
//创建UIScrollView显示区域
let rect = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
let scrollView = UIScrollView(frame: rect)
//创建内容区域
scrollView.contentSize = CGSize(width: 2 * self.view.bounds.width, height: 2 * self.view.bounds.height)
//获取内容区域大小
//let contentSize = scrollView.contentSize
// contentSize.width contentSize.height
//添加到当前视图中
self.view.addSubview(scrollView)
注:frame:定义的为scrollview在当前视图中显示的区域,contentSize定义的是scrollView中的内容显示区域,只有当contentSize的宽高大于frame的宽高时才会有滚动效果
2.设置滚动条样式
//是否显示垂直滚动条
scrollView.showsVerticalScrollIndicator = true //true:显示 false:不显示
//是否显示水平滚动条
scrollView.showsHorizontalScrollIndicator = true
//设置滚动条样式
scrollView.indicatorStyle = .white //black:黑色; white:纯白色;default:black
//如果元素内容大于UIScrollView的Size,进度条有闪烁效果
scrollView.flashScrollIndicators()
3.是否禁止滑动
scrollView.isScrollEnabled = true //true:可以滚动 false:禁止滚动
4.是否可以水平和垂直同时滑动
scrollView.isDirectionalLockEnabled = true //true:可以同时 false:只能滑动一个方向
5.是否开启反弹效果
scrollView.bounces = true //true:开启 false:关闭
6.是否开启翻页效果
scrollView.isPagingEnabled = true //true:开启翻页 false:不开启翻页
7.设置滚动条偏移量
//获取偏移量
let offsetPoint = scrollView.contentOffset
//offsetPoint.x offsetPoint.y
//设置偏移量
scrollView.setContentOffset(CGPoint(x:0, y:400), animated: true)
8.将指定区域移动到当前窗口处
scrollView.scrollRectToVisible(CGRect(x:0,y:400,width:200, height:200), animated: true)
9.视图是否跟踪、拖拽、减速
//是否开启跟随
let isTrack = scrollView.isTracking
//是否拖拽
let isDragg = scrollView.isDragging
//是否滑动减速
let isDecelerat = scrollView.isDecelerating
10.缩放
//设置缩放比例
scrollView.minimumZoomScale = 0.5
scrollView.maximumZoomScale = 1.5
//缩放事件请查看下面的代理方法
11.代理设置
scrollView.delegate = self
//开始将要滑动(还没有动)触发该方法
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
print("scrollViewWillBeginDragging")
}
//滑动触发该方法
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print("scrollViewDidScroll")
}
//该方法从 iOS 5 引入,在 didEndDragging 前被调用,当 willEndDragging 方法中 velocity 为 CGPointZero(结束拖动时两个方向都没有速度)时,didEndDragging 中的 decelerate 为 false,即没有减速过程,willBeginDecelerating 和 didEndDecelerating 也就不会被调用。反之,当 velocity 不为 CGPointZero 时,scroll view 会以 velocity 为初速度,减速直到 targetContentOffset。值得注意的是,这里的 targetContentOffset 是个指针,没错,你可以改变减速运动的目的地,这在一些效果的实现时十分有用,实例章节中会具体提到它的用法,并和其他实现方式作比较
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
print("scrollViewWillEndDragging" + "-->" + "\(velocity.x)" + "-->" + "\(velocity.y)")
}
//在用户结束拖动后被调用,decelerate 为 true 时,结束拖动后会有减速过程。注,在 didEndDragging 之后,如果有减速过程,scrollview 的 dragging 并不会立即置为 false,而是要等到减速结束之后,所以这个 dragging 属性的实际语义更接近 scrolling
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
print("scrollViewDidEndDragging" + "-->" + "\(decelerate)")
}
//减速动画开始前被调用
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
print("scrollViewWillBeginDecelerating")
}
//滑动结束时调用该函数
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
print("scrollViewDidEndDecelerating")
}
//滚动动画结束。注意这个方法必须在不是人为拖动的情况下调用该函数,否则不调用
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
print("scrollViewDidEndScrollingAnimation")
}
//是否允许滑动到顶部
func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {
return true
}
//垂直滑动时候,滑动到顶部的时候,要点击App的状态栏,才能出发该函数,否则不触发
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
print("scrollViewDidScrollToTop")
}
// 返回哪个子控件被捏合缩放
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return ImageView
}
//捏合缩放开始调用该函数
func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {
print("scrollViewWillBeginZooming")
}
//捏合缩放中,调用该函数
func scrollViewDidZoom(_ scrollView: UIScrollView) {
print("scrollViewDidZoom")
}
//捏合缩放结束调用该函数
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
print("scrollViewDidEndZooming")
}
效果如下图:
