美文网首页我的Swift开发
iOS UIScrollView的使用方法

iOS UIScrollView的使用方法

作者: 我会回来的 | 来源:发表于2021-10-22 13:56 被阅读0次

    UIScrollView的详细使用

    创建实例对象并初始化

    let scrollView = UIScrollVeiw(frame: self.view.frame)

    let subViewOne = UIView(frame: self.view.frame)

    let subViewTwo = UIView(frame: CGReact(x: self.view.frame.size.width, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height))

    scrollView.addSubView(subViewOne)

    scrollView.addSubView(subViewTwo)

    scrollView.contentSize = CGSize(width: self.view.frame.size.width * 2, height: self.view.frame.size.height) 

    scrollView.alwaysBounceVertical = true

    scrollView.alwaysBounceHorizontal = true

    scrollView.bouns = true

    scrollView.showsVerticalScrollIndicator = true

    scrollView.showsHorizontalScrollIndicator = false

    scrollView.isPagingEnabled = true

    常见的代理方法

    1 滑动过程中 scrollViewDidScroll(scrollView: UIScrollView)

    2 开始拖动 scrollViewWillBeginDragging(scrollView: UIScrollView)

    3 开始拖动(以某种速率和偏移量)  scrollViewDidEndDecelerating(scrollView: UIScrollView)

    4 停止拖动 scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool)

    5 开始滑动 scrollViewWillBeginDecelerating(scrollView: UIScrollView)

    代码如下:

    //

    //  ViewController.swift

    //  ScrollView

    //

    //  Created by swift on 2019/12/31.

    //  Copyright © 2019 kydqitb. All rights reserved.

    //

    importUIKit

    class ViewController: UIViewController, UIScrollViewDelegate {

        letview1=UIView()

        letview2=UIView()

        letview3=UIView()

        override func viewDidLoad() {

            super.viewDidLoad()

            // Do any additional setup after loading the view.

            addTitleLabel()

            setViews()

            addScrollView()

        }

        func addTitleLabel() {

            lettitle =UILabel(frame:CGRect(x:0, y:40, width:self.view.frame.width, height:40))

            title.textAlignment = .center

            title.text = "UIScrollView基础使用"

            self.view.addSubview(title)

        }

        func addScrollView() {

            letscrollView =UIScrollView()

            view.addSubview(scrollView)

            addAutoLayout(obj: scrollView)

            scrollView.delegate=self;

            //设置scrollView的背景颜色

            scrollView.backgroundColor=UIColor.red

            scrollView.contentSize=CGSize(width:view.frame.width, height:500*4)// ContentSize属性,滑动内容宽度和高度

    //修改滑动光标的颜色

            /**

              default // 默认灰色广标

              black // 黑色光标

              white // 白色光标

             */

            scrollView.indicatorStyle = UIScrollView.IndicatorStyle.black

            //true滑动到边缘时光标具有反弹效果(光标变短)

            scrollView.bounces=true

            //分页效果 每次移动一个格

            scrollView.contentOffset=CGPoint(x:50, y:500)

          // 显⽰示⽔水平滚动条(默认为true)

            scrollView.showsHorizontalScrollIndicator = true

            //显⽰示垂直滚动条(默认为true)

            scrollView.showsVerticalScrollIndicator = true

            //设置UIScrollView的缩放大小(默认缩放小大为1.0)

            scrollView.minimumZoomScale=0.2

            scrollView.maximumZoomScale=2

            // 缩放回弹(默认为true,在超出缩放范围会有一个回弹效果)

            scrollView.bouncesZoom=true

      // 点击设备状态栏会自动滚动到顶部

            scrollView.scrollsToTop=true       

     //把view添加到scrollView上

            scrollView.addSubview(view1)

            scrollView.addSubview(view2)

            scrollView.addSubview(view3)

        }

        func setViews() {

            view1.backgroundColor = UIColor.gray

            view1.frame=CGRect(x:0, y:0, width:view.frame.width, height:500)//此约束相对于scrollView.contentSize大小进行约束

           view2.backgroundColor = UIColor.green

           view2.frame=CGRect(x:0, y:500, width:view.frame.width, height:500)               

           view3.backgroundColor = UIColor.blue

            view3.frame=CGRect(x:0, y:1000, width:view.frame.width, height:500)

        }

       //MARK: - scrollView代理方法

        //scrollView滚动时调用,只要offset的值发生变化就调用

        funcscrollViewDidScroll(_scrollView:UIScrollView) {

            //打印视图偏移量

            print("X:\(scrollView.contentOffset.x)")

            print("Y:\(scrollView.contentOffset.y)")

    //        print("Y:\()")

        }

        //返回将要缩放的UIView对象

        funcviewForZooming(in scrollView:UIScrollView) ->UIView? {

            print("viewForZooming")

            //遍历scrollView的子view,找到自己的view

            forsubview:AnyObjectinscrollView.subviews{

                ifsubview.isKind(of:UIView.self){

                    returnsubviewas?UIView

                }

            }

            returnnil

        }

        //当将要开始缩放时,执行该方法。一次有效缩放就只执行一次

        funcscrollViewWillBeginZooming(_scrollView:UIScrollView, with view:UIView?) {

            print("scrollViewWillBeginZooming")

        }

        //当scrollView缩放时,调用该方法。在缩放过程中,会多次调用

        funcscrollViewDidZoom(_scrollView:UIScrollView) {

            print("scrollViewDidZoom")

        }

        //当缩放结束后,并且缩放大小回到minimumZoomScale与maximumZoomScale之间后(我们也许会超出缩放范围),调用该方法

        funcscrollViewDidEndZooming(_scrollView:UIScrollView, with view:UIView?, atScale scale:CGFloat) {

            print("scrollViewDidZoom scale: %f", scale)

        }

        //指示当用户点击状态栏后,滚动视图是否能够滚动到顶部

        func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {

            print("scrollViewShouldScrollToTop")

            //返回值:true可以返回到顶端, false不能返回到顶端

            return true

        }

        //当滚动视图滚动到最顶端后,执行该方法

        func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {

            print("scrollViewDidScrollToTop")

        }

        //当开始滚动视图时,执行该方法。一次有效滑动只执行一次

        func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {

            print("scrollViewWillBeginDragging")

        }

        //当开始滚动视图时,执行该方法。一次有效滑动只执行一次

        funcscrollViewDidEndDragging(_scrollView:UIScrollView, willDecelerate decelerate:Bool) {

            print("scrollViewDidEndDragging")

        }

        //滑动减速时调用该方法

        func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {

            print("scrollViewWillBeginDecelerating")

        }

        //滚动视图减速完成,滚动将停止时,调用该方法。一次有效滑动只执行一次

        func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

            print("scrollViewDidEndDecelerating")

        }

        //当滚动视图动画完成后,调用该方法,如果没有动画,那么该方法将不被调用

        func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {

            print("scrollViewDidEndScrollingAnimation")

        }

        //滑动scrollView,并且手指离开时执行。一次有效滑动只执行一次(当pagingEnabled属性为true时,不调用该方法)

        funcscrollViewWillEndDragging(_scrollView:UIScrollView, withVelocity velocity:CGPoint, targetContentOffset:UnsafeMutablePointer) {

            print("scrollViewWillEndDragging")

        }

        //AutoLayout 自动布局

        func addAutoLayout(obj:UIScrollView) {

        //除了AutoLayout,AutoresizingMask也是一种布局方式。当我们用AutoLayout代码添加视图时默认情况下,translatesAutoresizingMaskIntoConstraints = true , 此时视图的AutoresizingMask会被转换成对应效果的约束。这样很可能就会和我们手动添加的其它约束有冲突。此属性设置成false时,AutoresizingMask就不会变成约束。也就是说当前视图的 AutoresizingMask失效了。 避免布局冲突,把此设置为false

            obj.translatesAutoresizingMaskIntoConstraints = false

            //        自动布局构造函数

            //        NSLayoutConstraint(item: 视图,

            //              attribute: 约束属性,

            //        relatedBy: 约束关系,

            //        toItem: 参照视图,

            //        attribute: 参照属性,

            //        multiplier: 乘积,

            //        constant: 约束数值)

            //设置label控件的左边到self.view的左边距离为50pt

            let objLeft:NSLayoutConstraint = NSLayoutConstraint(item: obj, attribute: NSLayoutConstraint.Attribute.left, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self.view, attribute: NSLayoutConstraint.Attribute.left, multiplier: 1.0, constant: 50)

            obj.superview!.addConstraint(objLeft)

         //设置label控件的顶部到self.view的顶部距离为100pt

            let objTop:NSLayoutConstraint = NSLayoutConstraint(item: obj, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self.view, attribute: NSLayoutConstraint.Attribute.top, multiplier: 1.0, constant: 100)

            obj.superview!.addConstraint(objTop)

         //设置label控件的右边到self.view的右边距离为50pt

            let objRight:NSLayoutConstraint = NSLayoutConstraint(item: obj, attribute: NSLayoutConstraint.Attribute.right, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self.view, attribute: NSLayoutConstraint.Attribute.right, multiplier: 1.0, constant: -50)

            obj.superview!.addConstraint(objRight)

           let objBottom:NSLayoutConstraint = NSLayoutConstraint(item: obj, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self.view, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1.0, constant: -100)

           obj.superview!.addConstraint(objBottom)

    //        //设置label控件的高度为200pt

    //        let objHeight:NSLayoutConstraint = NSLayoutConstraint(item: obj, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute:NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1.0, constant: 400)

    //        obj.superview!.addConstraint(objHeight)

        }

    }

    相关文章

      网友评论

        本文标题:iOS UIScrollView的使用方法

        本文链接:https://www.haomeiwen.com/subject/lhxqaltx.html