杨锴
2024-09-11 7e417f3cdda6e7c1bd141867851e4944a429d067
XQMuse/Root/TreeGroup/TreeTeskVC.swift
@@ -40,6 +40,20 @@
class TreeTeskVC: BaseVC {
            @IBOutlet weak var view_energy: UIView!
            @IBOutlet weak var icon_energy: UILabel!
            @IBOutlet weak var btn_exchange: TapBtn!
            @IBOutlet weak var btn_watering: UIButton!
            @IBOutlet weak var view_group: UIView!
            @IBOutlet weak var view_group_inner: UIView!
            @IBOutlet weak var btn_seedingAgain: UIButton!
            @IBOutlet weak var view_progressTotal: UIView!
            @IBOutlet weak var view_progress: UIView!
            @IBOutlet weak var cons_progressHei: NSLayoutConstraint!
            @IBOutlet weak var label_progress: UILabel!
            private var tempEnergy:Int = 0
            private lazy var player:AVPlayer = {
                        let bgPath = Bundle.main.url(forResource: "bg", withExtension: "mov")
                        let p = AVPlayer(url: bgPath!)
@@ -48,10 +62,18 @@
            }()
            private lazy var playerLayer:AVPlayerLayer = {
                         let pLayer = AVPlayerLayer()
                        let pLayer = AVPlayerLayer()
                        pLayer.videoGravity = .resize
                        return pLayer
            }()
            private lazy var taskListView:TreeTeskListView = {
                        let view = TreeTeskListView.jq_loadNibView()
                        return view
            }()
            private var treeTeskListSwipe:TreeTeskListSwipe = .down
            private var settingModel = UserDefaultSettingViewModel.getSetting()
            private var treeImage = UIImageView()
            private var aPNGTreeImageView:APNGImageView?
@@ -81,30 +103,79 @@
            override func viewDidLayoutSubviews() {
                        super.viewDidLayoutSubviews()
                        playerLayer.frame = view.frame
                        view.bringSubviewToFront(self.view_energy)
                        view.bringSubviewToFront(self.btn_exchange)
                        view.bringSubviewToFront(self.btn_watering)
                        view.bringSubviewToFront(self.view_group)
                        view.bringSubviewToFront(self.btn_seedingAgain)
                        view.bringSubviewToFront(self.taskListView)
                        btn_seedingAgain.jq_borderWidth = 1
                        btn_seedingAgain.jq_borderColor = UIColor(hexString: "#8AAE65")
                        btn_seedingAgain.jq_addShadows(shadowColor: .white, corner: 20, radius: 5, offset: CGSize(width: 0, height: 0), opacity: 1)
                        taskListView.jq_addCorners(corner: [.topLeft,.topRight], radius: 20)
            }
    override func viewDidLoad() {
        super.viewDidLoad()
            override func viewDidLoad() {
                        super.viewDidLoad()
                        title = "树苗打卡站"
                        treeLevel = .level_1
    }
                        if settingModel!.userFirstOpenTreeTask{
                                    DispatchQueue.main.asyncAfter(delay: 2.0) {
                                                let h = (JQ_ScreenW - 90) * 0.8766
                                                TreeTeskFirstRuleView.show(title: "心泉之树", content:"亲爱的家人,感谢您用心的交流。\n现在,您心灵之树的种子已经植入这片沃土,请以农夫的心态用心浇灌,不久的将来,将会长成苍天大树,结出丰硕的果实。加油哦!",textAlignment: .left,height: h,textTopOffset: 22)
                                    }
                        }
                        let h = (JQ_ScreenW - 90) * 0.7729
                        TreeTeskFirstRuleView.show(title: "升级", content:"恭喜!你的树苗已升级为XX阶段!",textAlignment: .center,height: h,textTopOffset: 57)
                        DispatchQueue.main.asyncAfter(deadline: .now()+2.0) {
                                    self.setProgress(current: 900, total: 1800)
                        }
            }
            override func setUI() {
                        let btn = UIButton(type: .custom)
                        btn.setTitle("规则说明", for: .normal)
                        btn.setTitleColor(.black.withAlphaComponent(0.55), for: .normal)
                        btn.titleLabel?.font = .systemFont(ofSize: 14, weight: .medium)
                        btn.addTarget(self, action: #selector(ruleAction), for: .touchUpInside)
                        navigationItem.rightBarButtonItem = UIBarButtonItem(customView: btn)
                        btn_exchange.jq_cornerPartWithNib(byRoundingCorners: [.topLeft,.bottomLeft], radii: 17.5, size: CGSizeMake(98, 35))
                        playerLayer.player = player
                        view.layer.addSublayer(playerLayer)
                        player.play()
                        view_group_inner.jq_addCorners(corner: [.topLeft,.bottomRight], radius: 8)
                        if let sunApngImage = try? APNGImage(fileURL: Bundle.main.url(forResource: "apngb-animated_sun", withExtension: "png")!){
                                    sunApngImage.numberOfPlays = 2
                                    aPNGSunImageView = APNGImageView(image: sunApngImage)
                                    view.addSubview(aPNGSunImageView!)
                                    aPNGSunImageView?.layer.zPosition = -998
                                    aPNGSunImageView!.snp.makeConstraints { make in
                                                make.edges.equalToSuperview()
                                    }
                                    aPNGSunImageView!.startAnimating()
                        }
                        updateAni()
                        view.addSubview(taskListView)
                        taskListView.snp.makeConstraints { make in
                                    make.left.right.equalToSuperview()
                                    make.bottom.equalToSuperview().offset((JQ_ScreenW * 0.655 - 50))
                                    make.height.equalTo(JQ_ScreenW * 0.655)
                        }
            }
            override func setRx() {
@@ -126,39 +197,100 @@
                                                self?.aPNGTreeImageView?.startAnimating()
                                    }
                        }
                        taskListView.swipeClouse {[unowned self] dirition in
                                    guard self.treeTeskListSwipe != dirition else {return}
                                    self.treeTeskListSwipe = dirition
                                    switch dirition{
                                                case .down:
                                                            UIView.animate(withDuration: 0.3) {
                                                                        self.taskListView.snp.updateConstraints { make in
                                                                                    make.left.right.equalToSuperview()
                                                                                    make.bottom.equalToSuperview().offset((JQ_ScreenW * 0.655 - 50))
                                                                                    make.height.equalTo(JQ_ScreenW * 0.655)
                                                                        }
                                                                        self.view.layoutIfNeeded()
                                                            }
                                                case .up:
                                                            UIView.animate(withDuration: 0.3) {
                                                                        self.taskListView.snp.updateConstraints { make in
                                                                                    make.left.right.equalToSuperview()
                                                                                    make.bottom.equalToSuperview()
                                                                                    make.height.equalTo(JQ_ScreenW * 0.655)
                                                                        }
                                                                        self.view.layoutIfNeeded()
                                                            }
                                    }
                        }
            }
            // 0 - 100
            private func setProgress(current:Int,total:Int){
                        let pix = view_progressTotal.height / Double(total)
                        let px = Double(current) * pix
                        let max = view_progressTotal.height - 5
                        cons_progressHei.constant = min(px,max)
                        self.label_progress.attributedText = AttributedStringbuilder.build().add(string: "\(current)", withFont: .systemFont(ofSize: 12, weight: .bold), withColor: .white, indent: 0, lineSpace: 0).add(string: "\n/\(total)", withFont: .systemFont(ofSize: 11,weight: .thin), withColor: .white).mutableAttributedString
                        self.label_progress.textAlignment = .center
                        UIView.animate(withDuration: 1.5) {
                                    self.view_progressTotal.layoutIfNeeded()
                                    self.view_progress.jq_gradientColor(colorArr: [UIColor(hexString: "#FCFECA")!.cgColor,UIColor(hexString: "#3CB56A")!.cgColor], cornerRadius: 2.5,startPoint: CGPoint(x: 0, y: 0),endPoint: CGPoint(x: 1, y: 1),clear: true)
                        }
            }
            //能量明细
            @IBAction func energyDetailAction(_ sender: TapBtn) {
                        let vc = TreeTeskDetailVC()
                        push(vc: vc)
            }
            //兑换
            @IBAction func exchangeAction(_ sender: TapBtn) {
                        let vc = TreeTeskEnergyExchangeVC()
                        push(vc: vc)
            }
            @IBAction func wateringAction(_ sender: UIButton) {
                        if let waterApngImage = try? APNGImage(fileURL: Bundle.main.url(forResource: "apngb-animated-flow", withExtension:"png")!){
                                    waterApngImage.numberOfPlays = 2
                                    aPNGActionImageView = APNGImageView(image: waterApngImage)
                                    aPNGActionImageView!.alpha = 0
                                    aPNGSunImageView?.contentMode = .scaleToFill
                                    view.addSubview(aPNGActionImageView!)
                                    aPNGActionImageView!.snp.makeConstraints { make in
                                                make.center.equalToSuperview().inset(UIEdgeInsets(top: 90, left: 140, bottom: 0, right: 0))
                                                make.width.equalTo(200)
                                                make.height.equalTo(150)
                                    }
                                    UIView.animate(withDuration: 0.5) {
                                                self.aPNGActionImageView!.alpha = 1.0
                                    }
                                    aPNGActionImageView!.startAnimating()
                                    aPNGActionImageView!.onOnePlayDone.delegate(on: self) {[unowned self] a,b in
                                                if b == 2{
                                                            UIView.animate(withDuration: 0.5) {
                                                                        self.aPNGActionImageView!.alpha = 0
                                                            }completion: { _ in
                                                                        self.aPNGActionImageView!.removeFromSuperview()
                                                            }
                                                }
                                    }
                        }
            }
            @objc func jumpAction(){
                        treeLevel = TreeLevel(rawValue: treeLevel.rawValue + 1) ?? TreeLevel.level_1
            }
//                        if let waterApngImage = try? APNGImage(fileURL: Bundle.main.url(forResource: "apngb-animated-flow", withExtension:"png")!){
//                                    waterApngImage.numberOfPlays = 2
//                                    aPNGActionImageView = APNGImageView(image: waterApngImage)
//                                    aPNGActionImageView!.alpha = 0
//                                    aPNGSunImageView?.contentMode = .scaleToFill
//                                    view.addSubview(aPNGActionImageView!)
//                                    aPNGActionImageView!.snp.makeConstraints { make in
//                                                make.center.equalToSuperview().inset(UIEdgeInsets(top: 90, left: 140, bottom: 0, right: 0))
//                                                make.width.equalTo(200)
//                                                make.height.equalTo(150)
//                                    }
//                                    UIView.animate(withDuration: 0.5) {
//                                                self.aPNGActionImageView!.alpha = 1.0
//                                    }
//                                    aPNGActionImageView!.startAnimating()
//
//                                    aPNGActionImageView!.onOnePlayDone.delegate(on: self) {[unowned self] a,b in
//                                                if b == 2{
//                                                            UIView.animate(withDuration: 0.5) {
//                                                                        self.aPNGActionImageView!.alpha = 0
//                                                            }completion: { _ in
//                                                                        self.aPNGActionImageView!.removeFromSuperview()
//                                                            }
//                                                }
//                                    }
//                        }
            @objc func ruleAction(){
                        let vc = WebVC(type: .treeRule)
                        vc.title = "规则说明"
                        push(vc: vc)
            }
            private func updateAni(){
@@ -184,7 +316,7 @@
                                                view.addSubview(aPNGTreeImageView!)
                                    }
//                                    aPNGTreeImageView!.backgroundColor = .red.withAlphaComponent(0.1)
                                    //                                    aPNGTreeImageView!.backgroundColor = .red.withAlphaComponent(0.1)
                                    let scale:Double = 0.55
                                    aPNGTreeImageView!.snp.remakeConstraints { make in