天天看點

UIKit - UIScrollView(滾動視圖)

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") 
}
           

效果如下圖:

UIKit - UIScrollView(滾動視圖)