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

import Foundation
import YYCategories

typealias closureBlock = ()->Void;

///正面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: self.imageView.bottom - 20, width: self.width, height: self.height - self.imageView.bottom + 20))
        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(){
        if (self.tapTransformAciton != nil){
            self.tapTransformAciton
        }
    }
    
}

///反面View
class CNBackMainView : 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: 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: self.imageView.bottom - 20, width: self.width, height: self.height-self.imageView.bottom + 20))
        contentView.backgroundColor = UIColor.white
        contentView.clipsToBounds = true
        contentView.layer.cornerRadius = 20
        
        return contentView
        
    }()
    
    func initUI()
    {
        self.addSubview(self.imageView)
        self.addSubview(self.contentView)
    }
    
    @objc func tapAction(){
        if (self.tapTransformAciton != nil){
            self.tapTransformAciton
        }
    }
}

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

///中间主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")
    }
    
    lazy var frontView:CNFrontMainView = {
//        _frontView = [[CNFrontMainView alloc] initWithFrame:self.bounds];
//        __weak CNMainView *weakSelf = self;
//        _frontView.tapTransformAciton = ^{
//            [weakSelf transformToBacnkView];
//        };
        let frontView = CNFrontMainView.init(frame: self.bounds)
        frontView.tapTransformAciton = {
            
            print("点击了")
        }
        return frontView
    }()
    
    lazy var backView:CNBackMainView = {
        let backView = CNBackMainView.init(frame: self.bounds)
        backView.tapTransformAciton = {
            
            print("点击了")
        }
        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;

    }
    
    /***********事件*****************/
    ///旋转到反面
    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);
    }
}