Skip to content

Latest commit

 

History

History
80 lines (60 loc) · 4.45 KB

8.UI基础之UIScrollView简介.md

File metadata and controls

80 lines (60 loc) · 4.45 KB

8.UI基础之UIScrollView简介

UIScrollView相当于Android的ScrollView。可以将UIScrollView理解为一块大的画布,我们可以向其中放入任意尺寸的一组视图。

import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        let scrollView = UIScrollView(frame: view.bounds)
        view.addSubview(scrollView)
        // 设置是否翻页
        scrollView.isPagingEnabled = true
        // 可以滚动的区域
        scrollView.contentSize = CGSize.init(width: view.bounds.size.width*9, height: view.bounds.size.height)
        // 显⽰示⽔水平滚动条
        scrollView.showsHorizontalScrollIndicator = true
        // 显⽰示垂直滚动条
        scrollView.showsVerticalScrollIndicator = true
        // 滚动条样式
        scrollView.indicatorStyle = UIScrollView.IndicatorStyle.white
        // 设置回弹效果
        scrollView.bounces = true
        // 设置scrollView可以滚动
        scrollView.isScrollEnabled = true
        // 当scrollsToTop=true时,点击设备状态栏会自动滚动到顶部
        scrollView.scrollsToTop = true
        // 缩放的最小比例
        scrollView.minimumZoomScale = 0.5
        // 放大的最大比例
        scrollView.maximumZoomScale = 2.0
        // 缩放回弹
        scrollView.bouncesZoom = true
        
        for i in 1..<10 {
            let imageView = UIImageView(frame: CGRect(x: view.frame.size.width*CGFloat(i-1), y: 0, width: view.frame.size.width, height: view.frame.size.height))
            imageView.image = UIImage(named: "美女01.jpg")
            scrollView.addSubview(imageView)
        }
        // 指定scrollView的UIScrollViewDelegate协议,协议里面可以获取具体的滚动的一些状态
        scrollView.delegate = self
    }
    
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        print("scroll view 滚动时调用")
    }
    
    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        print("scroll view 开始滑动")
    }
    
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        print("scroll view结束滑动")
    }
}

需要注意的是,向UIScrollView示例中添加的子视图的尺寸已经超出了当前界面的边界,所以需要设置UIScrollView的contentSize属性来控制滚动视图的可滚动范围,从属性名(内容尺寸)就可以理解,其用来设置UIScrollView滚动视图的内容区域尺寸,如果内容区域的尺寸超出了UIScrollView实例本身的尺寸大小,则当前UIScrollView实例就可以进行滑动来适应其内容区域的尺寸。

如果将UIScrollView实例的contentSize属性高度设置为大于UIScrollView本身的高度,滚动视图则会支持纵向的滚动。在进行滚动视图的滑动操作时,细心的读者可以发现,当用户将滚动视图滑动到边缘时,其实还可以继续拖曳一段距离,而当用户手指离开屏幕后,滚动视图会产生回弹效果。这种阻尼回弹效果是由UIScrollView类的bounces属性决定的,其需要设置为一个Bool值,默认为true,即支持回弹效果,如果设置为false则不支持。还有一个细节,当滚动视图的contentSize比其本身的尺寸小时,则默认是不产生阻尼回弹效果的。

在iOS平台上,许多常见的应用程序都有图片轮播视图控件,可以作为图片查看器或者轮播广告位,其一般是通过UIScrollView来实现的,除了可以滚动查看外,这种轮播器还有一个功能,即自动定位分页。所谓自动定位分页,是指当用户图片滑动轮播器在两个图片之间停下时,如果用户抬起手指,轮播器会自动根据图片显示出的部分尺寸大小自动定位,使轮播器完整显示某一张图片。UIScrollView类中提供了isPagingEnabled属性,用来设置是否开启这种定位分页效果。