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")
}
效果如下圖:
