CNMetaCodeHomePageController.swift 6.18 KB
//
//  CNMetaCodeHomePageController.swift
//  metaCode
//
//  Created by daojian on 2023/6/1.
//

import Foundation
import UIKit
import YYCategories

let Width: CGFloat  = UIScreen.main.bounds.size.width
let Height: CGFloat = UIScreen.main.bounds.size.height

class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDelegate, NewPagedFlowViewDataSource, CNCustomIndexViewDelegate{
    
    ///NewPagedFlowView 开始滑动时的偏移量
    private var beginOffset = 0.0
    
    private var tabBarY:CGFloat = 0.0
    
    // MARK: - 懒加载
    ///数据源
    lazy var dataArray: NSMutableArray = {
        
        return NSMutableArray.init()
    }()
    
    ///左右滑动分页view
    lazy var pageFlowView: NewPagedFlowView = {
        let pageFlowView = NewPagedFlowView.init(frame: CGRectMake(0, 0, Width, Height))

        pageFlowView.delegate = self
        pageFlowView.dataSource = self
        pageFlowView.minimumPageAlpha = 0.1
        pageFlowView.isCarousel = false
        pageFlowView.orientation = .horizontal
        pageFlowView.leftRightMargin = 20
        pageFlowView.isOpenAutoScroll = false
        
        //左右图片的距离顶部和底部的高度
        pageFlowView.topBottomMargin = 100
        
        return pageFlowView
        
    }()
    
    ///背景
    var backgroupView: CNHomePageBackgroupView = {
        let backgroupView = CNHomePageBackgroupView.init(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: KSreenWidth*1.333))
        return backgroupView
    }()
    
    //MARK: 生命周期方法
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.tabBarY = (self.tabBarController?.tabBar.top)!
        

        for i in (0..<5) {
            self.dataArray.add("122")
        }
        
        self.setupUI()
        
//        self.tabBarController?.tabBar.top = self.tabBarY + KSreenHeight

    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.view.height = KSreenHeight
        
        self.topNavView.isHidden = true

    }
    // MARK: - 添加UI
    func setupUI(){
        self.view.backgroundColor = KVCBackgroupColor
        self.view.addSubview(self.backgroupView)
        self.view.addSubview(self.pageFlowView)
        self.pageFlowView.reloadData()
        
    }
    
    // MARK: - NewPagedFlowView代理
    
    func numberOfPages(in flowView: NewPagedFlowView!) -> Int {
        self.dataArray.count
    }
    
    func flowView(_ flowView: NewPagedFlowView!, cellForPageAt index: Int) -> PGIndexBannerSubiew! {
        var bannerView:CNCustomIndexView? = flowView.dequeueReusableCell() as? CNCustomIndexView
        
        if (bannerView == nil) {
            bannerView = CNCustomIndexView.init(frame: CGRectMake(0, 0, Width-50, Height))
            bannerView?.tag = index + 100
            bannerView?.layer.cornerRadius = 4
            bannerView?.layer.masksToBounds = false
        }
        bannerView?.superScrollView = flowView.scrollView
        bannerView?.associatedVCView = self.view
        bannerView?.delegate  = self
        return bannerView
    }
    
    func sizeForPage(in flowView: NewPagedFlowView!) -> CGSize {
        return CGSize(width: Width-50, height: Height)
    }
    
    ///NewPagedFlowView 开始滑动
    func willBeginScroll(_ scrollView: UIScrollView!) {
        beginOffset = scrollView.contentOffset.x
    }
    ///NewPagedFlowView 滑动中
    func didScroll(_ scrollView: UIScrollView!) {
        
        let currentOffset:CGFloat = scrollView.contentOffset.x
        
        if(currentOffset > beginOffset){
            
            
            if let rightView = self.backgroupView.getRightView(){
                
                if let currentApearView = self.backgroupView.currentApearView{
                    self.backgroupView.insertSubview(rightView, belowSubview: currentApearView)
                }
                
                self.backgroupView.currentApearView?.maskLayer.right = KSreenWidth - (currentOffset-beginOffset)*2.5
            }else{
                
            }
        }
        
        if(currentOffset < beginOffset){
            if let leftView = self.backgroupView.getLeftView(){
                
                if let currentApearView = self.backgroupView.currentApearView{
                    self.backgroupView.insertSubview(leftView, belowSubview: currentApearView)
                }
                
                self.backgroupView.currentApearView?.maskLayer.left = (beginOffset-currentOffset)*2.5
            }else{
                
            }
        }
    }
    ///NewPagedFlowView 滑动将要结束
    func willEndScroll(_ scrollView: UIScrollView!, willDecelerate decelerate: Bool) {
        
        //暂时禁止再次滑动,后期优化通过自定义UIScrollView 结束动画来实现
        if(decelerate == true){
            scrollView.isScrollEnabled = false
        }
    }
    ///NewPagedFlowView 滑动结束
    func didEndScroll(_ scrollView: UIScrollView!) {
        
        scrollView.isScrollEnabled = true

        let toIndex:Int = Int(scrollView.contentOffset.x/(Width-50))
        
        if toIndex == self.backgroupView.currentApearViewIndex{
            return
        }
        
        self.backgroupView.replaceCurerrentApearView(fromIndex: self.backgroupView.currentApearViewIndex, toIndex: toIndex)
        

    }
    
    
    //MARK: - CNCustomIndexView 代理方法
    
    func customIndexViewWillBeiginScroll(scrollView: UIScrollView) {
        self.view.height = KSreenHeight
    }
    func customIndexViewDidScroll(scrollView: UIScrollView) {
        //让tabbar跟随scrollView平移量进行移动
        let fabsOffset: CGFloat = abs(scrollView.contentOffset.y - KSreenHeight)
        self.tabBarController?.tabBar.top = self.tabBarY + fabsOffset
        
        //让背景view也跟随scrollView平移量的3倍速进行移动
        self.backgroupView.top = -fabsOffset*3
    }
   
    
    func customIndexViewDidEndScroll(scrollView: UIScrollView) {
        if scrollView.contentOffset.y == KSreenHeight {
            self.view.height = self.tabBarY
        }
    }
    
}