杨锴
2024-09-04 5dc5755468523e46c2314699d7b54e98c3329015
XQMuse/Root/TreeGroup/TreeTeskVC.swift
@@ -10,6 +10,34 @@
import JQTools
import APNGKit
enum TreeLevel:Int{
            case level_1 = 1
            case level_2 = 2
            case level_3 = 3
            case level_4 = 4
            case level_5 = 5
//            case level_6 = 6
//            case level_7 = 7
//            case level_8 = 8
//            case level_9 = 9
//            case level_10 = 10
            var aniResource:String{
                        switch self {
                                    case .level_1:return "apngb-animated-level-1"
                                    case .level_2:return "apngb-animated-level-2"
                                    case .level_3:return "apngb-animated-level-3"
                                    case .level_4:return "apngb-animated-level-4"
                                    case .level_5:return "apngb-animated-level-5"
//                                    case .level_6:return "apngb-animated-level-6"
//                                    case .level_7:return "apngb-animated-level-7"
//                                    case .level_8:return "apngb-animated-level-8"
//                                    case .level_9:return "apngb-animated-level-9"
//                                    case .level_10:return "apngb-animated-level-10"
                        }
            }
}
class TreeTeskVC: BaseVC {
            private lazy var player:AVPlayer = {
@@ -29,6 +57,12 @@
            private var aPNGTreeImageView:APNGImageView?
            private var aPNGSunImageView:APNGImageView?
            private var aPNGActionImageView:APNGImageView?
            private var treeLevel:TreeLevel = .level_5{
                        didSet{
                                    updateAni()
                        }
            }
            override func viewDidDisappear(_ animated: Bool) {
@@ -52,7 +86,7 @@
    override func viewDidLoad() {
        super.viewDidLoad()
                        treeLevel = .level_1
    }
            override func setUI() {
@@ -70,19 +104,7 @@
                                    }
                                    aPNGSunImageView!.startAnimating()
                        }
                        if let treeApngImage = try? APNGImage(fileURL: Bundle.main.url(forResource: "apngb-animated", withExtension: "png")!){
                                    treeApngImage.numberOfPlays = 1
                                    aPNGTreeImageView = APNGImageView(image: treeApngImage)
                                    let tap = UITapGestureRecognizer(target: self, action: #selector(jumpAction))
                                    aPNGTreeImageView!.addGestureRecognizer(tap)
                                    view.addSubview(aPNGTreeImageView!)
                                    aPNGTreeImageView!.snp.makeConstraints { make in
                                                make.edges.equalToSuperview()
                                    }
                                    aPNGTreeImageView!.startAnimating()
                        }
                        updateAni()
            }
            override func setRx() {
@@ -108,47 +130,92 @@
            @objc func jumpAction(){
                        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()
                        treeLevel = TreeLevel(rawValue: treeLevel.rawValue + 1) ?? TreeLevel.level_1
                                    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()
                                                            }
//                        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()
//                                                            }
//                                                }
//                                    }
//                        }
            }
            private func updateAni(){
                        guard let url = Bundle.main.url(forResource: treeLevel.aniResource, withExtension: "png") else {return}
                        if let treeApngImage = try? APNGImage(fileURL: url){
                                    if treeLevel == .level_1{
                                                treeApngImage.numberOfPlays = 1
                                    }else{
                                                treeApngImage.numberOfPlays = 0
                                    }
                                    if aPNGTreeImageView == nil{
                                                aPNGTreeImageView = APNGImageView(image: treeApngImage)
                                                aPNGTreeImageView?.tag = 10101
                                                aPNGTreeImageView!.contentMode = .redraw
                                                let tap = UITapGestureRecognizer(target: self, action: #selector(jumpAction))
                                                aPNGTreeImageView!.addGestureRecognizer(tap)
                                    }else{
                                                aPNGTreeImageView?.image = treeApngImage
                                    }
                                    if view.viewWithTag(10101) == nil{
                                                view.addSubview(aPNGTreeImageView!)
                                    }
                                    aPNGTreeImageView!.backgroundColor = .red.withAlphaComponent(0.3)
                                    let scale:Double = 0.7
                                    aPNGTreeImageView!.snp.remakeConstraints { make in
                                                make.centerX.equalToSuperview()
                                                make.bottom.equalToSuperview().offset(-220)
                                                switch treeLevel {
                                                            case .level_1:
                                                                        make.width.equalTo(184 * scale)
                                                                        make.height.equalTo(124 * scale)
                                                            case .level_2:
                                                                        make.width.equalTo(255 * scale)
                                                                        make.height.equalTo(193 * scale)
                                                            case .level_3:
                                                                        make.width.equalTo(243 * scale)
                                                                        make.height.equalTo(237 * scale)
                                                            case .level_4:
                                                                        make.width.equalTo(245 * scale)
                                                                        make.height.equalTo(280 * scale)
                                                            case .level_5:
                                                                        make.width.equalTo(479 * scale)
                                                                        make.height.equalTo(389 * scale)
                                                }
                                    }
                                    aPNGTreeImageView!.startAnimating()
                        }
//                        let springAnimation = CASpringAnimation(keyPath: "transform.scale.y")
//                        springAnimation.fromValue = 1
//                        springAnimation.toValue = 1.06
//                        springAnimation.initialVelocity = 0.5 //初速度
//                        springAnimation.repeatCount = 1
//                        springAnimation.duration = 3.0
//                        springAnimation.mass = 0.4 //增加该值会增大弹性效果,即震动次数更多、幅度更大
//                        springAnimation.stiffness = 100 //增大stiffness会减少震动次数,减小
//                        springAnimation.damping = 1
//                        springAnimation.isRemovedOnCompletion = false
//                        springAnimation.fillMode = .forwards
//                        aPNGTreeImageView?.layer.add(springAnimation, forKey: nil)
            }
}