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

import Foundation
import UIKit
import YYCategories
import SwiftGifOrigin

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

///存储是否第一次显示首页上滑引导
let CNKeyIsFirstAppearUpSlideHomeGuide: String = "isFirstAppearUpSlideHomeGuideKey"
///存储是否第一次显示首页下滑引导
let CNKeyIsFirstAppearDownSlideHomeGuide: String = "isFirstAppearDownSlideHomeGuideKey"

class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDelegate, NewPagedFlowViewDataSource, CNCustomIndexViewDelegate{
    
    ///上滑引导View
    lazy var upSlideGuideView:CNHomePageGuideView = {
        let upSlideGuideView = CNHomePageGuideView.init(frame: UIScreen.main.bounds)
        upSlideGuideView.setBottomText(text: "向上滑动")
        upSlideGuideView.skipAction = {
            [weak self] in
            self?.upSlideGuideView.removeFromSuperview()
            self?.upSlideGifView.removeFromSuperview()
            UserDefaults.standard.set("flase", forKey: CNKeyIsFirstAppearUpSlideHomeGuide)
            UserDefaults.standard.set("flase", forKey: CNKeyIsFirstAppearDownSlideHomeGuide)
            self?.pageFlowView.scrollView.isScrollEnabled = true
        }
        return upSlideGuideView
    }()
    ///上滑引导动图
    lazy var upSlideGifView:UIImageView = {
        let gif: UIImageView = UIImageView(frame: CGRect(x: 200, y: 30, width: 40, height: 80))
        gif.loadGif(name: "slide_up")
        gif.center = self.view.center
        gif.contentMode = .scaleAspectFill
        
        return gif
    }()
    
    ///下滑引导View
    lazy var downSlideGuideView:CNHomePageGuideView = {
        let downSlideGuideView = CNHomePageGuideView.init(frame: UIScreen.main.bounds)
        downSlideGuideView.setBottomText(text: "向下滑动")
        downSlideGuideView.skipAction = {
            [weak self ] in
            self?.downSlideGuideView.removeFromSuperview()
            self?.downSlideGifView.removeFromSuperview()
            UserDefaults.standard.set("flase", forKey: CNKeyIsFirstAppearDownSlideHomeGuide)
            self?.pageFlowView.scrollView.isScrollEnabled = true
        }
        return downSlideGuideView
    }()
    ///下滑引导动图
    lazy var downSlideGifView:UIImageView = {
        let gif: UIImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 40, height: 80))
        gif.center = self.view.center
        gif.loadGif(name: "slide_down")
        gif.contentMode = .scaleAspectFill
        return gif
    }()
    
    
    ///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
        

//
//
//        let maskView = UIView.init(frame: UIScreen.main.bounds)
//        maskView.backgroundColor = .black.withAlphaComponent(0.7)
//        maskView.isUserInteractionEnabled = false
//
//        let path:UIBezierPath = UIBezierPath.init(rect: UIScreen.main.bounds)
//
//        let W = KSreenWidth-50
//        let H = W*1.5
//        let rect = CGRectMake(25, (KSreenHeight-H)/2,W, H)
//
//        let appendPath: UIBezierPath = UIBezierPath.init(roundedRect: rect, cornerRadius: 20)
//        path.append(appendPath.reversing())
//        let shapeLayer: CAShapeLayer = CAShapeLayer()
//        shapeLayer.path = path.cgPath;
//        maskView.layer.mask = shapeLayer;
//
//        self.view.addSubview(maskView)
        
    }
    // MARK: - 添加UI
    func setupUI(){
        self.view.backgroundColor = KVCBackgroupColor
        self.view.addSubview(self.backgroupView)
        self.view.addSubview(self.pageFlowView)
        self.pageFlowView.reloadData()
        
        //首选判断是否显示了上滑引导
        let isFirstAppearUpSlideHomeGuide:Any? =  UserDefaults.standard.object(forKey: CNKeyIsFirstAppearUpSlideHomeGuide)
        
        if let tempGuide = isFirstAppearUpSlideHomeGuide{
            //已经显示过上滑引导
            
            //判断是否显示过下滑引导
            let isFirstAppearDownSlideHomeGuide:Any? =  UserDefaults.standard.object(forKey: CNKeyIsFirstAppearDownSlideHomeGuide)
            if let  tempDownGuide = isFirstAppearDownSlideHomeGuide{
                
            }else{
                //没有显示下滑引导
                self.pageFlowView.scrollView.isScrollEnabled = false
                self.view.addSubview(self.downSlideGuideView)
                self.view.addSubview(self.downSlideGifView)
            }
            
        }else{
            //没显示过上滑引导
            self.pageFlowView.scrollView.isScrollEnabled = false
            self.view.addSubview(self.upSlideGuideView)
            self.view.addSubview(self.upSlideGifView)
        }
        
    }
    
    // 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
        
        /**开始拖拽移除引导View**/
        
        //移除上滑引导
        if(self.upSlideGuideView.superview != nil){
            self.upSlideGuideView.removeFromSuperview()
            self.upSlideGifView.removeFromSuperview()
            UserDefaults.standard.set("flase", forKey: CNKeyIsFirstAppearUpSlideHomeGuide)
        }
        
        //移除下滑引导
        if (self.downSlideGuideView.superview != nil) {
            self.downSlideGuideView.removeFromSuperview()
            self.downSlideGifView.removeFromSuperview()
            UserDefaults.standard.set("flase", forKey: CNKeyIsFirstAppearDownSlideHomeGuide)
            self.pageFlowView.scrollView.isScrollEnabled = true
        }
       
        
    }
    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
            
            //判断是否显示过下滑引导
            let isFirstAppearDownSlideHomeGuide:Any? =  UserDefaults.standard.object(forKey: CNKeyIsFirstAppearDownSlideHomeGuide)
            if let  tempDownGuide = isFirstAppearDownSlideHomeGuide{
                print("不该进来")
            }else{
                //没有显示下滑引导
                self.view.addSubview(self.downSlideGuideView)
                self.view.addSubview(self.downSlideGifView)
                self.pageFlowView.scrollView.isScrollEnabled = false
            }
        }
    }
    
}