杨锴
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,8 +147,10 @@
                        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")!){
        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!)
@@ -157,6 +160,8 @@
                                    }
                                    aPNGSunImageView!.startAnimating()
                        }
        }
                        updateAni()
                        view.addSubview(taskListView)
@@ -417,11 +422,12 @@
    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
@@ -429,21 +435,21 @@
                                                treeApngImage.numberOfPlays = 0
                                    }
                                    if aPNGTreeImageView == nil{
                                                aPNGTreeImageView = APNGImageView(image: treeApngImage)
                                                aPNGTreeImageView?.tag = 10101
                                                aPNGTreeImageView!.contentMode = .redraw
                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))
                                                aPNGTreeImageView!.addGestureRecognizer(tap)
                    self.aPNGTreeImageView!.addGestureRecognizer(tap)
                                    }
                                    if view.viewWithTag(10101) == nil{
                                                view.addSubview(aPNGTreeImageView!)
                    view.addSubview(self.aPNGTreeImageView!)
                                    }
                                    let scale:Double = 0.55 //放大倍数
                                    aPNGTreeImageView!.snp.remakeConstraints { make in
                self.aPNGTreeImageView!.snp.remakeConstraints { make in
                                                make.centerX.equalToSuperview().offset(-10)
                                                make.bottom.equalToSuperview().offset(-220)
                                                make.width.equalTo(642 * scale)
@@ -476,6 +482,7 @@
                        }
            }
}
}
extension TreeTeskVC:CAAnimationDelegate{
            func animationDidStart(_ anim: CAAnimation) {
@@ -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)
                }
            }
        }
    }
}