CNMainView.swift 7.33 KB
//
//  CNMainView.swift
//  metaCode
//
//  Created by daojian on 2023/5/31.
//

import Foundation
import YYCategories

///旋转动画时间
let KTransformAnimationTime:CGFloat  = 0.75;



///正面View
class CNFrontMainView : UIView{
    ///点击反转事件
    var tapTransformAciton:closureBlock?

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.initUI()
        let tap:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapAction))
        self.addGestureRecognizer(tap)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    lazy var imageView:UIImageView = {

        let tempImageView:UIImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: self.width, height: self.width * 0.7))
        tempImageView.image = UIImage(named: "homePage_zhongguorenming_bank")
        
        let path : UIBezierPath = UIBezierPath.init(roundedRect: tempImageView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 20, height: 20))
        
        let maskLayer = CAShapeLayer()
        maskLayer.frame = tempImageView.bounds
        maskLayer.path = path.cgPath
        tempImageView.layer.mask = maskLayer
        
        return tempImageView
    }()
    
    lazy var contentView : UIView = {

        let contentView = UIView.init(frame: CGRect(x: 0, y: 0, width: self.width, height: self.height ))
        contentView.backgroundColor = UIColor.white
        contentView.clipsToBounds = true
        contentView.layer.cornerRadius = 20
        
//        let imageView = UIImageView.init(frame: CGRect(x: 10, y: 10, width: contentView.width - 20, height: contentView.height - 20))
//        imageView.image = UIImage.init(named: "homePage_mainView_front");
//        contentView.addSubview(imageView)
        
        return contentView
        
    }()
    
    func initUI()
    {
//        self.addSubview(self.imageView)
        self.addSubview(self.contentView)
    }
    
    @objc func tapAction(){
        tapTransformAciton!()
    }
}

///反面View
class CNBackMainView : UIView{
    ///点击反转事件
    var tapTransformAciton:closureBlock?

    
    // MARK: - 懒加载
    lazy var imageView:UIImageView = {

        let tempImageView:UIImageView = UIImageView(frame: CGRect(x: 10, y: 10, width: self.width-20, height: self.height - 20))
        tempImageView.image = UIImage(named: "homePage_backViewImage")
        
        return tempImageView
    }()
    
    lazy var contentView : UIView = {

        let contentView = UIView.init(frame: CGRect(x: 0, y: 0, width: self.width, height: self.height))
        contentView.backgroundColor = UIColor.white
        contentView.clipsToBounds = true
        contentView.layer.cornerRadius = 20
        
        return contentView
        
    }()
    
    lazy var bottomBackBtn : UIButton = {
        let bottomBackBtn = UIButton(type: .custom)
        bottomBackBtn.frame = CGRectMake(0, 0, 90, 40)
        bottomBackBtn.centerX = self.contentView.width/2
        bottomBackBtn.bottom = self.contentView.height - 15
        bottomBackBtn.setTitle("回到首页", for: .normal)
        bottomBackBtn.setTitleColor(UIColor("#333333"), for: .normal)
        bottomBackBtn.setImage(UIImage(named: "homePage_backBtn_icon"), for: .normal)
        bottomBackBtn.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 8)
        bottomBackBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15)

        bottomBackBtn.addTarget(self, action: #selector(tapAction), for: .touchUpInside)
        return bottomBackBtn
    }()
    //MARK: - 初始化
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.initUI()
        let tap:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapAction))
        self.addGestureRecognizer(tap)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func initUI()
    {
//        self.addSubview(self.imageView)
        self.addSubview(self.contentView)
        self.contentView.addSubview(self.bottomBackBtn)
    }
    //MARK: - 事件
    @objc func tapAction(){
        tapTransformAciton!()
    }
}



///中间主VIew
class CNMainView : UIView{
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.initUI()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    ///正面View
    lazy var frontView:CNFrontMainView = {

        let frontView = CNFrontMainView.init(frame: self.bounds)
        frontView.tapTransformAciton = { [weak self] in
            self?.transformToBacnkView();
        }
        return frontView
    }()
    
    ///背面View
    lazy var backView:CNBackMainView = {
        let backView = CNBackMainView.init(frame: self.bounds)
        backView.tapTransformAciton = { [weak self] in
            self?.transformToFrontView()
        }
        return backView
    }()
    
    
    
    
    func initUI()
    {
        self.addSubview(self.frontView)
        self.addSubview(self.backView)
        
        
        self.backView.isHidden = true;
        
//        self.layer.cornerRadius = 20;
//        self.layer.shadowOpacity = 1;
//        self.layer.shadowColor = UIColor("#eeeeee")?.cgColor
//        self.layer.shadowOffset = CGSize(width: 10, height: 10)
//        self.layer.shadowRadius = 10;

    }
    
    // MARK: - 事件
    ///旋转到反面
    func transformToBacnkView()
    {
        //旋转动画
        UIView.animate(withDuration: KTransformAnimationTime) {
            self.layer.transform = CATransform3DMakeRotation(.pi, 0, 1, 0);
        }
        
        //让背面也旋转180度
        self.backView.layer.transform = CATransform3DMakeRotation(.pi, 0, 1, 0);

        //在中间时刻进行正反面view的隐藏显示处理
        let deadline = DispatchTime.now() - DispatchTimeInterval.milliseconds(50) + DispatchTimeInterval.milliseconds(Int (KTransformAnimationTime*1000/2))
                
        DispatchQueue.main.asyncAfter(deadline: deadline, execute: DispatchWorkItem(block: {
            UIView.animate(withDuration: 0.05) {
                self.frontView.isHidden = true;
                self.backView.isHidden = false;
            }
        }))
        
        
    }
    ///旋转到正面
    func transformToFrontView()
    {
        //旋转动画
        UIView.animate(withDuration: KTransformAnimationTime) {
            self.layer.transform = CATransform3DMakeRotation(0, 0, 1, 0);

        } completion: { _ in
            //背面恢复旋转
            self.backView.layer.transform = CATransform3DMakeRotation(0, 0, 1, 0);
        }
        
    

        //在中间时刻进行正反面view的隐藏显示处理
        let deadline = DispatchTime.now() - DispatchTimeInterval.milliseconds(50) + DispatchTimeInterval.milliseconds(Int (KTransformAnimationTime*1000/2))
        
        DispatchQueue.main.asyncAfter(deadline: deadline, execute: DispatchWorkItem(block: {
            UIView.animate(withDuration: 0.05) {
                self.frontView.isHidden = false;
                self.backView.isHidden = true;
            }
        }))
        
    }
    
    ///缩放
    open func scaledView(scale:CGFloat)
    {
        self.frontView.imageView.transform = CGAffineTransformMakeScale(scale, scale);
    }
}