UIScrollView屏幕滾動事件
一、知識點簡單介紹
1.UIScrollView控件是什么?
(1)移動設備的屏幕?小是極其有限的,因此直接展示在?戶眼前的內容也相當有限
(2)當展?的內容較多,超出?個屏幕時,?戶可通過滾動?勢來查看屏幕以外的內容
(3)普通的UIView不具備滾動功能,不能顯示過多的內容
(4)UIScrollView是一個能夠滾動的視圖控件,可以?來展示大量的內容,并且可以通 過滾 動查看所有的內容
2.UIScrollView的簡單使用
(1)將需要展?的內容添加到UIScrollView中
(2)設置UIScrollView的contentSize屬性,告訴UIScrollView所有內容的尺?寸,也就是告訴 它滾動的范圍(能滾多遠,滾到哪?是盡頭)
3.注意點
? 如果UIScrollView?無法滾動,可能是以下原因:
(1)沒有設置contentSize
(2) scrollEnabled = NO
(3) 沒有接收到觸摸事件:userInteractionEnabled = NO
(4)沒有取消autolayout功能(要想scrollView滾動,必須取消autolayout)
二、關于UIScrollView常見屬性的一些說明
import UIKit
class ViewController: UIViewController {
//屏幕的寬
let kScreenWidth = UIScreen.main.bounds.size.width
//屏幕的高
let kScreenHeight = UIScreen.main.bounds.size.height
override func viewDidLoad() {
super.viewDidLoad()
//===================UIScrollView====================
//是所有滾動視圖的積累,只要一個視圖能夠滾動,要么是UIScrollView,要么是UIScrollView的子類,UIScrollView有兩個很重要的類:UITableView,UICollectionView
//什么時候才需要滾動,當我們的內容區域大于可視區域的時候,為了看到更多的內容,才需要滾動去查看。
//創建UIScrollView
let scrollView = UIScrollView(frame: CGRect(x: 20, y: 20, width: kScreenWidth-40, height: kScreenHeight-40))
scrollView.backgroundColor = UIColor.white
//設置scrollView的內容區域大小
scrollView.contentSize = CGSize(width: kScreenWidth*3, height: kScreenHeight*2)
//設置scrollView的偏移量(重要)
scrollView.contentOffset = CGPoint(x: kScreenWidth, y: 0)
//設置滾動條的樣式
scrollView.indicatorStyle = .white
//設置是否顯示滾動條
scrollView.showsVerticalScrollIndicator = false//垂直滾動條
scrollView.showsHorizontalScrollIndicator = false//水平滾動條
//方向鎖(水平移動就不能垂直移動,垂直移動就不能水平移動,只能朝一個方向滾動)
scrollView.isDirectionalLockEnabled = true
// 設置是否有彈簧效果
scrollView.bounces = false
//設置是否在水平方向上總是有彈簧效果(當內容區域和可視區域一樣大使)
// scrollView.alwaysBounceHorizontal = true
//設置是否在垂直方向上總是有彈簧效果
// scrollView.alwaysBounceVertical = true
//設置是否支持整頁滾動
scrollView.isPagingEnabled = true
//關閉滾動功能
scrollView.isScrollEnabled = true
//設置scrollView是否支持點擊狀態欄回到頂部
scrollView.scrollsToTop = true
//scrollView代理屬性
scrollView.delegate = self
//設置scrollView最大最小縮放比例
scrollView.minimumZoomScale = 1
scrollView.maximumZoomScale = 3
self.view.addSubview(scrollView)
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: kScreenWidth-40, height: kScreenHeight-40))
imageView.image = #imageLiteral(resourceName: "girl2.jpg")
imageView.tag = 200
scrollView.addSubview(imageView)
}
}
//在延展中管理UIScrollViewDelegate的協議方法
extension ViewController :UIScrollViewDelegate {
//1.當scrollView滾動的時候,這個方法會持續觸發
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print("滾動著")
print(scrollView.contentOffset)
}
//2.縮放的過程中持續觸發
func scrollViewDidZoom(_ scrollView: UIScrollView) {
print("縮放著")
print(scrollView.zoomScale)
}
//3.將要開始拖拽的時候觸發
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
print("將要開始拖拽")
}
//4.將要結束拖拽的時候觸發
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
print("將要結束拖拽")
}
//5.已經結束拖拽的時候觸發
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
print("結束拖拽")
}
//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已經回到頂部")
}
}