美文网首页
UIStackView快速构建首次轮播效果

UIStackView快速构建首次轮播效果

作者: 啧啧同学 | 来源:发表于2020-08-05 09:03 被阅读0次

根据轮播的效果,首先定义轮播的配置参数,这里使用元组,设置别名

//(加载的图片名,标题,描述)
typealias pageConfigItem = (String, String, String)


    //MARK: Property

    //配置的图片及展示的标题文案 
    let pagesConfig = [("launch_guide_1".localImageName(), "", ""),
                       ("launch_guide_2".localImageName(), "", ""),
                       ("launch_guide_3".localImageName(), "", "")]

    //滚动用的scrollView,并设置isPagingEnabled为true
    lazy var scrollView: UIScrollView = {
        let view = UIScrollView(frame: .zero)
        view.isPagingEnabled = true
        view.showsHorizontalScrollIndicator = false
        view.showsVerticalScrollIndicator = false
        // 用来监听当前滑动到第几页
        view.delegate = self
        return view
    }()
    
    //加载展示用的UIStackView,设置axis为水平,distribution为fill
    lazy var pagesView: UIStackView = {
        let view = UIStackView(frame: .zero)
        view.axis = .horizontal
        view.distribution = .fill
        return view
    }()
    
    // 轮播的indecator
    lazy var bubbleView: YFPageControl = {
        let view = YFPageControl(pageCount: pagesConfig.count)
        view.backgroundColor = .red
        return view
    }()

使用UIScrollView 的delegate配合 计算变量 来记录页面切换时的下标及操作

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        
        let offset = scrollView.contentOffset.x
        let width = scrollView.bounds.size.width
        let safeWidth = width == 0 ? 1 : width
        currentPage = Int(round(offset / safeWidth))
    }
  
    var currentPage = 0 {
        willSet {
            if currentPage != newValue, newValue < pagesConfig.count {
                bubbleView.currentPage = newValue
                ensureBtn.isHidden = newValue != pagesConfig.count - 1
            } else {/* do nothing */}
        }
    }

进行UI布局,这里使用 snapkit

    func setupSubviews() {
        view.addSubview(scrollView)
        scrollView.addSubview(pagesView)
        view.addSubview(bubbleView)
        
        if #available(iOS 11, *) {
            scrollView.contentInsetAdjustmentBehavior = .never
        } else {
            automaticallyAdjustsScrollViewInsets = false
        }
     
        scrollView.snp.makeConstraints { (make) in
            if #available(iOS 11.0, *) {
                make.edges.equalTo(view.safeAreaLayoutGuide)
            } else {
                make.edges.equalToSuperview()
            }
        }
        
        pagesView.snp.makeConstraints { (make) in
            make.edges.equalToSuperview()

           //这里必须要设置高度,否则无法确定frame
            if #available(iOS 11.0, *) {
                make.height.equalTo(view.safeAreaLayoutGuide)
            } else {
                make.height.equalTo(UIScreen.main.bounds.height)
            }
        }
        
        bubbleView.snp.makeConstraints { (make) in
            make.left.equalToSuperview().offset(40)
            make.height.equalTo(8)
            if #available(iOS 11.0, *) {
                make.bottom.equalTo(view.safeAreaLayoutGuide).inset(60)
            } else {
                make.bottom.equalToSuperview().inset(60)
            }
        }
    }

配置好后仅需要在viewDidLoad调用相关的UI布局及数据的渲染即可


    override func viewDidLoad() {
        super.viewDidLoad()
        
        navigationBarHidden = true
        setupSubviews()
        configPages()
    }
    
   //
    func configPages() {
        pagesView.subviews.forEach { (view) in
            view.removeFromSuperview()
        }
        
        pagesConfig.forEach { (tuple) in
            let page = YFGuidePageView(frame: .zero)
            page.config(imageName: tuple.0, titleTxt: tuple.1, contentTxt: tuple.2)
            page.snp.makeConstraints { (make) in
                make.width.equalTo(UIScreen.main.bounds.width)
            }
            pagesView.addArrangedSubview(page)
        }
    }

相关文章

  • UIStackView快速构建首次轮播效果

    根据轮播的效果,首先定义轮播的配置参数,这里使用元组,设置别名 使用UIScrollView 的delegate配...

  • 轮播初实现过程笔记

    第一次代码实现 首次引入jQuery的使用,实现手动点动轮播效果。 HTML代码解说:display:flex 是...

  • 使用 React Native 构建 Facebook Pape

    我模仿 Facebook 的 Paper 应用构建了一个开闭卡片的轮播效果作为技术演示.它使用了 React Na...

  • 第十七谈:轮播效果

    本节课我们来开始学习 Bootstrap 的提供的轮播效果组件。 一.轮播效果 一个最简单的经典幻灯片轮播效果,如...

  • Axure交互设计操作(二)

    之前一里总结到轮播效果,其实实战当中轮播效果一般是复合使用的。比如: 和轮播图类似,这其实也是一个轮播效果。我刚遇...

  • 任务27 - jquery实战 - 轮播

    代码 实现如下轮播效果 展示、代码 实现上述轮播效果,在一个页面有三个轮播 展示、代码 实现如下无限循环滚动轮播效...

  • 关于轮播的思路(使用clone 移动宽度)

    实现如下轮播效果(渐变轮播)task27-1 一个页面有3个轮播task-27-2 实现如下无限循环滚动轮播效果t...

  • 技术练习的demo集

    demo1 实现优酷轮播图效果 页面效果展示 功能:自动轮播,hover停止轮播,点击left/right上一页/...

  • RN-第三方之react-native-image-zoom-v

    本文内容多张图片放大后轮播、捏合效果单张图片放大捏合效果 多张图片放大后轮播、捏合效果 单张图片放大捏合效果

  • android轮播图效果

    先上效果图: viewpager+handler+runnableTask实现轮播图效果。可以自动轮播,左右无限滑...

网友评论

      本文标题:UIStackView快速构建首次轮播效果

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