一 、 UIScrollView 的介绍
UIScrollView 是一个用于滑动展示的控件。
二、 UIScrollView 的初始化& 渲染
1、 初始化
var NwScrollView = UIScrollView.init()
NwScrollView = UIScrollView.init(coder: <#T##NSCoder#>)
var NwScrollView = UIScrollView.init(frame: <#T##CGRect#>)
2、渲染
/**
渲染
*/
self.view.addSubview(NwScrollView)
三、代理事件
1、设置代理
/**
设置代理
*/
NwScrollView.delegate = self
2、代理的各个事件函数解说
// MARK : UIScrollView 的代理事件处理
// TODO : UIScrollView 开始将要滑动(还没有动)就触发该方法
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
print("scrollViewWillBeginDragging")
}
// TODO : UIScrollView 只要滑动就出发该方法
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print("scrollViewDidScroll")
}
// TODO : 该方法从 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)")
}
// TODO : 在用户结束拖动后被调用,decelerate 为 true 时,结束拖动后会有减速过程。注,在 didEndDragging 之后,如果有减速过程,scroll view 的 dragging 并不会立即置为 false,而是要等到减速结束之后,所以这个 dragging 属性的实际语义更接近 scrolling
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
print("scrollViewDidEndDragging" + "--->" + "\(decelerate)")
}
// TODO : 减速动画开始前被调用
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
print("scrollViewWillBeginDecelerating")
}
// TODO : UIScrollView 滑动结束时,调用该函数
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
print("scrollViewDidEndDecelerating")
}
// TODO : UIScrollView 的滚动动画结束。注意这个方法必须在不是人为拖动的情况下调用该函数,否则不调用
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
print("scrollViewDidEndScrollingAnimation")
}
// MARK : UIScrollView 关于滑动到顶部的函数介绍
// TODO : 是否允许滑动到顶部
func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {
return true
}
// TODO : UIScrollView 垂直滑动时候,滑动到顶部的时候,要点击App的状态栏,才能出发该函数,否则不触发
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
print("scrollViewDidScrollToTop")
}
// MARK : UIScrollView 的捏合缩放方法的介绍
// TODO : 这个方法返回ScrollView 的中那个子控件被捏合缩放
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return NwImageView
}
// TODO : 这是捏合缩放开始调用该函数
func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {
print("scrollViewWillBeginZooming")
}
// TODO : 捏合缩放中,调用该函数
func scrollViewDidZoom(_ scrollView: UIScrollView) {
print("scrollViewDidZoom")
}
// TODO : 捏合缩放结束调用该函数
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
print("scrollViewDidEndZooming")
}
四、UIScrollView 的滚动和设置偏移
1、 想让UIScrollView滚动,就不要要求UIScrollView 的consentSize 要大于视图SIze。
/**
设置UIScrollView的内容大小
*/
NwScrollView.contentSize = CGSize.init(width: 100, height:2 * self.view.bounds.height)
2、设置滚动指定的位置
/**
设置内容偏移
*/
NwScrollView.setContentOffset(CGPoint.init(x: 100, y: 0), animated: true)
另一种方式:
/**
scrollRectToVisible:animated:与setContentOffset:animated:类似,只不过是将scrollView坐标系内的一块指定区域移到scrollView的窗口中,如果这部分已经存在于窗口中,则什么也不做。
*/
NwScrollView.scrollRectToVisible(CGRect.init(x: 0, y: 200, width: 100, height: 200), animated: true)
3 、获取UIScrollView 的偏移量
/**
获取偏移UIScrollView 的偏移量
*/
let NwPoint = NwScrollView.contentOffset
print("\(NwPoint.x)" + "\(NwPoint.y)")
4、 获取UIScrollView的内容大小
/**
获取UIScroolView 的内容大小
*/
let NwCGSize = NwScrollView.contentSize
print("\(NwCGSize.width)" + "\(NwCGSize.height)")
五 、UIScrollView 的滚动条的显示
1、显示滚动条
/**
是否展示水平&垂直的滚动条
*/
NwScrollView.showsVerticalScrollIndicator = true
NwScrollView.showsHorizontalScrollIndicator = true
2、设置滚动条的样式
/**
设置UIScrollView 的滚动条的样式
UIScrollViewIndicatorStyle
black : 黑色的滚动条
white : 纯白色的滚动条
default : black
*/
NwScrollView.indicatorStyle = .white
/**
如果元素内容大于UIScrollView的Size,这将显示的时候,先闪烁一下进度条
*/
NwScrollView.flashScrollIndicators()
3、 设置滚动条的滑动方向
/**
设置UIScrollView 是否可以同时 水平& 垂直同时滑动
true : 只可以单向滑动
false : 两个方向可以同时滑动
*/
NwScrollView.isDirectionalLockEnabled = false
六 、UIScrollView中元素的缩放
1、 要实现元素的缩放必须先设置缩放大小
/**
设置缩放比例
*/
NwScrollView.minimumZoomScale = 0.5
NwScrollView.maximumZoomScale = 1.5
2、返回缩放的图层(UIVeiw)
// MARK : UIScrollView 的捏合缩放方法的介绍
// TODO : 这个方法返回ScrollView 的中那个子控件被捏合缩放
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return NwImageView
}
3、 缩放处理时调用的函数
// TODO : 这是捏合缩放开始调用该函数
func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {
print("scrollViewWillBeginZooming")
}
// TODO : 捏合缩放中,调用该函数
func scrollViewDidZoom(_ scrollView: UIScrollView) {
print("scrollViewDidZoom")
}
// TODO : 捏合缩放结束调用该函数
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
print("scrollViewDidEndZooming")
}
七、是否延时处理UIScrollVieiw 上的手势
/**
delaysContentTouches:是否推迟触屏手势处理,默认值为YES。设置为YES的时候,系统在确定是否发生scroll事件之后,才会处理触屏手势,否则,则会立即调用touchesShouldBegin:withEvent:inContentView:方法
*/
NwScrollView.delaysContentTouches = true
NwScrollView.touchesShouldBegin([UITouch.init()], with: UIEvent.init(), in: NwScrollView)
NwScrollView.touchesShouldCancel(in: NwScrollView)
八、获取UIScrollVIew 是否跟踪& 拖拽 & 减速
/**
判断UIScrollView 是否开启跟随
*/
let isTrack = NwScrollView.isTracking
print(isTrack)
/**
判断UIScrollView 是否拖拽
*/
let isDragg = NwScrollView.isDragging
print(isDragg)
/**
判断UIScrollView 是否滑动减速
*/
let isDecelerat = NwScrollView.isDecelerating
print(isDecelerat)
十、 UIScrollView 设置翻页效果&是否允许滑动
/**
是否启动翻页效果
*/
NwScrollView.isPagingEnabled = true
/**
控制UIScrollView 的滑动是否允许
*/
NwScrollView.isScrollEnabled = true
十一、 UIScrollView 的反弹效果
1、 反弹效果的设置
/**
是否可以反弹
*/
NwScrollView.bounces = true
2、 特殊的反弹
/**
这是当UIScrollView 中元素的内容小于 UIScrollView的consize 的时,可以有反弹效果
*/
NwScrollView.alwaysBounceHorizontal = true
NwScrollView.alwaysBounceVertical = true
十二、 UIScrollView 的回到顶部相关函数&属性的介绍
1、 设置允许触发回到顶部的函数
/**
允许滑动到顶部
*/
NwScrollView.scrollsToTop = true
或者实现两个函数
// MARK : UIScrollView 关于滑动到顶部的函数介绍
// TODO : 是否允许滑动到顶部
func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {
return true
}
2、 想要触发顶部事件需要点击App的状态
// TODO : UIScrollView 垂直滑动时候,滑动到顶部的时候,要点击App的状态栏,才能出发该函数,否则不触发
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
print("scrollViewDidScrollToTop")
}
网友评论