| | |
| | | import AVKit |
| | | import JQTools |
| | | import APNGKit |
| | | import SDWebImage |
| | | import UserDefaultsStore |
| | | |
| | | let TreeTaskUpdate_Noti = Notification.Name.init(rawValue: "TreeTaskUpdate_Noti") |
| | |
| | | |
| | | 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) |
| | |
| | | |
| | | 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 |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | // } |
| | | } |
| | | } |
| | | |
| | | 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) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |