天天看点

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(滚动视图)