swift

Swift-UIScrollView的基本使用

2018-11-10  本文已影响0人  给点阳光我就灿烂_ab56

一. 为什么要用UIScrollView

手机屏幕有限,但又想展示更多内容,就要用到UIScrollView来滚动屏幕。

二. 前驱知识

1. Frame属性

UIScrollView中的Frame属性代表可见的区域(屏幕内部的)

2. ContentSize属性(CGSize类型)

ContentSize属性代表可展示的所有区域(包括屏幕外部)(滚动范围)

三. 使用场景

1. 新闻轮播图(十分常用)

2.应用第一次加载的引导界面

3.大数据图表设计引擎中的图表滑动、照片展示

四. UIScrollView 的快速使用

1. 初始化视图

let scrollView = UIScrollView(frame: CGRect(x: 0, y: 50, width: 414, height: 200)) // Frame属性
scrollView.contentSize = CGSize(width: 414*5, height: 200) // ContentSize属性
scrollView.backgroundColor = .gray
view.addSubview(scrollView)

2. 其他属性

①indicatorStyle:滑动时在底部添加滑动光标

scrollView.indicatorStyle = .white // 添加白色光标
//scrollView.indicatorStyle = .black   黑色光标
//scrollView.indicatorStyle = .default 默认灰色广标

②bounces: 滑动到边缘时光标具有反弹效果

scrollView.bounces = true  // false 光标就会很僵直 没有反弹

③isPagingEnabled: 分页效果 每次移动一个格

scrollView.isPagingEnabled = true

④contentOffset: (CGPoint)

contentOffset是UIScrollView当前显示区域的顶点相对于UIScrollView的frame的坐标。UIScrollView实际上分为两层-scrollView(滚动视图,用于滚动)和contentView(内容视图,用于展示内容)。

scrollView的坐标原点即为其frame规定的位置,而contentView的起始位置是以scrollView坐标原点为原点,所展示内容的左上角那个点的坐标,即为contentOffset,可看作contentView左上角相对于scrollView左上角的位移偏移量。

⑤bouncesZoom

类似于bounces属性,这个属性可以让用户的缩放操作超出最大或最小缩放级别,然后弹回。

五. 在UIScrollView 中添加控件

let lable = UILabel(frame: CGRect(x: 414, y: 0, width: 414, height: 50)) //坐标(x, y)决定 lable 在滚动视图中的位置
        lable.textColor = .red
        lable.text = "hello"
        lable.backgroundColor = .green
        scrollView.addSubview(lable)
滚动页面1 滚动页面2

六. 委托代理方法(delegate)

1. 要为UIScrollView设置代理

使含有UIScrollView 的 ViewController 遵循 UIScrollViewDelegate 协议,这里用到了扩展

extension ViewController: UIScrollViewDelegate {
}

2. delegate函数

①scrollViewDidScroll: 滚动时不停的回掉

精度很高 有一个重要的使用场景:打印滚动时坐标的偏移量

func scrollViewDidScroll(_ scrollView: UIScrollView) {
        var x = scrollView.contentOffset.x
        print("x = \(x)")
    }

②scrollViewWillBeginDragging:当用户首次拖动时调用

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        <#code#>
    }

③ scrollViewWillEndDragging: 将要结束拖动时

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
        <#code#>
    }

④ scrollViewDidEndDragging: 当用户的手指停止拖动,离开屏幕时

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {  // Bool参数指明报告滚动到最后视图前是否要减速
        <#code#>
    }

⑤ scrollViewDidZoom:缩放过程中持续触发

func scrollViewDidZoom(_ scrollView: UIScrollView) {
        <#code#>
    }

其余列在代码框里:

//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已经回到顶部")
    }

上一篇 下一篇

猜你喜欢

热点阅读