杨锴
2025-04-16 09a372bc45fde16fd42257ab6f78b8deeecf720b
XQMuse/Root/TreeGroup/TreeTeskVC.swift
@@ -9,6 +9,7 @@
import AVKit
import JQTools
import APNGKit
import SDWebImage
import UserDefaultsStore
let TreeTaskUpdate_Noti = Notification.Name.init(rawValue: "TreeTaskUpdate_Noti")
@@ -146,17 +147,21 @@
                        view_group_inner.jq_addCorners(corner: [.topLeft,.bottomRight], radius: 8)
        let path = JQ_LibaryPath +  "/tree_img/"
        SDImageCacheHealper.cache(namespace:"treeCache", path: path, url: TreeLevel.sunAni) { [unowned self] data in
            guard let originData = data else {return}
            if let sunApngImage = try? APNGImage(data: originData){
                sunApngImage.numberOfPlays = 2
                aPNGSunImageView = APNGImageView(image: sunApngImage)
                view.addSubview(aPNGSunImageView!)
                aPNGSunImageView?.layer.zPosition = -998
                aPNGSunImageView!.snp.makeConstraints { make in
                    make.edges.equalToSuperview()
                }
                aPNGSunImageView!.startAnimating()
            }
        }
                        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)
@@ -417,63 +422,65 @@
    private func updateAni(_ needAni:Bool = true){
        guard let treeLevel = currentLevel else {return}
                        guard let animateUrl = Bundle.main.url(forResource: treeLevel.aniResource, withExtension: "png") else {return}
                        guard let staticDroopUrl = Bundle.main.url(forResource: treeLevel.staticDroopResource, withExtension: "png") else {return}
                        if let treeApngImage = try? APNGImage(fileURL: animateUrl){
        let path = JQ_LibaryPath +  "/tree_img/"
        SDImageCacheHealper.cache(namespace:"treeCache", path: path, url: treeLevel.aniResourceUrl) { [unowned self] data in
            guard let dataOrigin = data else {return}
            if let treeApngImage = try? APNGImage(data: dataOrigin){
                                    if treeLevel == .level_1{
                                                treeApngImage.numberOfPlays = 1
                                    }else{
                                                treeApngImage.numberOfPlays = 0
                                    }
                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)
                                    }
                if self.aPNGTreeImageView == nil{
                    self.aPNGTreeImageView = APNGImageView(image: treeApngImage)
                    self.aPNGTreeImageView?.tag = 10101
                    self.aPNGTreeImageView!.contentMode = .redraw
                    let tap = UITapGestureRecognizer(target: self, action: #selector(jumpAction))
                    self.aPNGTreeImageView!.addGestureRecognizer(tap)
                }
                                    if view.viewWithTag(10101) == nil{
                                                view.addSubview(aPNGTreeImageView!)
                                    }
                if view.viewWithTag(10101) == nil{
                    view.addSubview(self.aPNGTreeImageView!)
                }
                                    let scale:Double = 0.55 //放大倍数
                let scale:Double = 0.55 //放大倍数
                                    aPNGTreeImageView!.snp.remakeConstraints { make in
                                                make.centerX.equalToSuperview().offset(-10)
                                                make.bottom.equalToSuperview().offset(-220)
                                                make.width.equalTo(642 * scale)
                                                make.height.equalTo(731 * scale)
                                    }
                self.aPNGTreeImageView!.snp.remakeConstraints { make in
                    make.centerX.equalToSuperview().offset(-10)
                    make.bottom.equalToSuperview().offset(-220)
                    make.width.equalTo(642 * scale)
                    make.height.equalTo(731 * scale)
                }
            let duration = needAni ? 0.6:0
                                    UIView.animate(withDuration: duration) {
                                                self.aPNGTreeImageView?.alpha = 0
                let duration = needAni ? 0.6:0
                UIView.animate(withDuration: duration) {
                    self.aPNGTreeImageView?.alpha = 0
                                    }completion: { state in
                                                if state{
                                                            self.aPNGTreeImageView!.image = treeApngImage
                                                            UIView.animate(withDuration: 0.5, delay: 0.2) {
                                                                        self.aPNGTreeImageView?.alpha = 1
                                                            }completion: { _ in
                                                                        self.aPNGTreeImageView!.startAnimating()
                }completion: { state in
                    if state{
                        self.aPNGTreeImageView!.image = treeApngImage
                        UIView.animate(withDuration: 0.5, delay: 0.2) {
                            self.aPNGTreeImageView?.alpha = 1
                        }completion: { _ in
                            self.aPNGTreeImageView!.startAnimating()
                                                                        if self.treeInfoModel?.status == .yes{
                                                                                    self.aPNGTreeImageView?.stopAnimating()
                                                                                    self.aPNGTreeImageView?.image = nil
                                                                                    self.aPNGTreeImageView?.staticImage = UIImage(contentsOfFile: staticDroopUrl.droppedScheme()!.absoluteString)
                        }else{
                            self.aPNGTreeImageView?.staticImage = nil
                            self.aPNGTreeImageView?.image = treeApngImage
                            if self.treeInfoModel?.status == .yes{
                                self.aPNGTreeImageView?.stopAnimating()
                                self.aPNGTreeImageView?.image = nil
                                self.aPNGTreeImageView?.staticImage = UIImage(contentsOfFile: staticDroopUrl.droppedScheme()!.absoluteString)
                            }else{
                                self.aPNGTreeImageView?.staticImage = nil
                                self.aPNGTreeImageView?.image = treeApngImage
                            }
                        }
                                                            }
                                                }
                                    }
                        }
                    }
                }
            }
        }
            }
}
@@ -490,3 +497,32 @@
//                        }
            }
}
class SDImageCacheHealper{
    static func cache(namespace:String,path:String,url:String,clouse:@escaping (Data?)->Void){
        let image = SDImageCache(namespace: namespace.jq_md5String(), diskCacheDirectory: path)
        let loader = SDImageLoadersManager.shared
        let manager = SDWebImageManager(cache: image, loader: loader)
        //过滤链接,去除参数,保证缓存的KEY被MD5后不变
        manager.cacheKeyFilter = SDWebImageCacheKeyFilter(block: { url in
            let img = url.absoluteString.components(separatedBy: "?").first
            return img
        })
        if let localImgData = image.diskImageData(forKey: url){
            clouse(localImgData)
        }else{
            let originUrl = URL(string: url)
            manager.loadImage(with: originUrl, progress: nil) { imageData, data,error, cacheType, finished, imageUrl in
                if error != nil{
                    clouse(nil)
                }
                if data != nil{
                    clouse(data)
                }
            }
        }
    }
}