| | |
| | | import AVKit |
| | | 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" |
| | | } |
| | | } |
| | | } |
| | | import UserDefaultsStore |
| | | |
| | | class TreeTeskVC: BaseVC { |
| | | |
| | | private let cacheTreeInfoModel = UserDefaultsStore<TreeInfoModel>(uniqueIdentifier: "cacheTreeInfoModel")! |
| | | |
| | | @IBOutlet weak var view_energy: UIView! |
| | | @IBOutlet weak var icon_energy: UILabel! |
| | |
| | | @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") |
| | |
| | | private var aPNGSunImageView:APNGImageView? |
| | | private var aPNGActionImageView:APNGImageView? |
| | | |
| | | private var treeLevel:TreeLevel = .level_1{ |
| | | didSet{ |
| | | updateAni() |
| | | } |
| | | } |
| | | |
| | | private var treeInfoModel:TreeInfoModel? |
| | | |
| | | override func viewDidDisappear(_ animated: Bool) { |
| | | super.viewDidDisappear(animated) |
| | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "树苗打卡站" |
| | | treeLevel = .level_1 |
| | | btn_seedingAgain.isHidden = true |
| | | |
| | | if settingModel!.userFirstOpenTreeTask{ |
| | | DispatchQueue.main.asyncAfter(delay: 2.0) { |
| | |
| | | } |
| | | } |
| | | |
| | | 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) |
| | | } |
| | | |
| | | getTreeData() |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | make.bottom.equalToSuperview().offset((JQ_ScreenW * 0.655 - 50)) |
| | | make.height.equalTo(JQ_ScreenW * 0.655) |
| | | } |
| | | } |
| | | |
| | | private func getTreeData(){ |
| | | |
| | | //缓存的树苗信息 |
| | | if let cacheModel = cacheTreeInfoModel.allObjects().first{ |
| | | treeInfoModel = cacheModel |
| | | updateTreeInfo() |
| | | } |
| | | |
| | | Services.treeInfo().subscribe(onNext: {data in |
| | | if let m = data.data{ |
| | | try? self.cacheTreeInfoModel.save(m) |
| | | |
| | | //检查hash,进行同步 |
| | | if m.toJSON()?.jq_hash() != self.treeInfoModel?.toJSON()?.jq_hash(){ |
| | | self.treeInfoModel = m |
| | | self.updateTreeInfo() |
| | | } |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | private func updateTreeInfo(){ |
| | | btn_seedingAgain.isHidden = treeInfoModel!.sowAgain == .no |
| | | |
| | | // if treeLevel.rawValue != treeInfoModel?.treeLevelType.rawValue{ |
| | | // treeLevel = treeInfoModel!.treeLevelType |
| | | // } |
| | | |
| | | icon_energy.text = String(format: "当前能量值:%ld", treeInfoModel!.currentEnergyValue) |
| | | setProgress(current: treeInfoModel!.growthValue, total: treeInfoModel!.nextLevel) |
| | | } |
| | | |
| | | override func setRx() { |
| | |
| | | |
| | | //能量明细 |
| | | @IBAction func energyDetailAction(_ sender: TapBtn) { |
| | | |
| | | let vc = TreeTeskDetailVC() |
| | | push(vc: vc) |
| | | } |
| | |
| | | } |
| | | |
| | | @IBAction func wateringAction(_ sender: UIButton) { |
| | | sender.isUserInteractionEnabled = false |
| | | |
| | | if treeInfoModel == nil {return} |
| | | |
| | | // guard m.currentEnergyValue != 0 else{ |
| | | // alert(msg: "已经没有能量值了,快去做任务吧");return |
| | | // } |
| | | |
| | | Services.watering().subscribe(onNext: {data in |
| | | if let m = data.data{ |
| | | if m.isNext{ |
| | | var type = self.treeInfoModel?.treeLevelType ?? .level_1 |
| | | self.treeInfoModel!.treeLevelType = TreeLevel(rawValue: type.rawValue + 1) ?? .level_1 |
| | | |
| | | let h = (JQ_ScreenW - 90) * 0.7729 |
| | | TreeTeskFirstRuleView.show(title: "升级", content:"恭喜!你的树苗已升级为\(self.treeInfoModel!.treeLevelType.title)阶段!",textAlignment: .center,height: h,textTopOffset: 57) |
| | | |
| | | self.updateAni() |
| | | } |
| | | self.treeInfoModel?.currentEnergyValue = 0 |
| | | self.treeInfoModel?.growthValue = m.growthValue |
| | | self.treeInfoModel?.nextLevel = m.nextLevel |
| | | self.updateTreeInfo() |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | |
| | | if let waterApngImage = try? APNGImage(fileURL: Bundle.main.url(forResource: "apngb-animated-flow", withExtension:"png")!){ |
| | | waterApngImage.numberOfPlays = 2 |
| | | aPNGActionImageView = APNGImageView(image: waterApngImage) |
| | |
| | | |
| | | aPNGActionImageView!.onOnePlayDone.delegate(on: self) {[unowned self] a,b in |
| | | if b == 2{ |
| | | sender.isUserInteractionEnabled = true |
| | | UIView.animate(withDuration: 0.5) { |
| | | self.aPNGActionImageView!.alpha = 0 |
| | | }completion: { _ in |
| | |
| | | } |
| | | |
| | | @objc func jumpAction(){ |
| | | treeLevel = TreeLevel(rawValue: treeLevel.rawValue + 1) ?? TreeLevel.level_1 |
| | | // treeLevel = TreeLevel(rawValue: treeLevel.rawValue + 1) ?? TreeLevel.level_1 |
| | | } |
| | | |
| | | @objc func ruleAction(){ |
| | |
| | | } |
| | | |
| | | private func updateAni(){ |
| | | let treeLevel = treeInfoModel?.treeLevelType ?? .level_1 |
| | | |
| | | guard let url = Bundle.main.url(forResource: treeLevel.aniResource, withExtension: "png") else {return} |
| | | if let treeApngImage = try? APNGImage(fileURL: url){ |
| | | 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){ |
| | | |
| | | if treeLevel == .level_1{ |
| | | treeApngImage.numberOfPlays = 1 |
| | |
| | | view.addSubview(aPNGTreeImageView!) |
| | | } |
| | | |
| | | // aPNGTreeImageView!.backgroundColor = .red.withAlphaComponent(0.1) |
| | | let scale:Double = 0.55 |
| | | let scale:Double = 0.55 //放大倍数 |
| | | |
| | | aPNGTreeImageView!.snp.remakeConstraints { make in |
| | | make.centerX.equalToSuperview().offset(-10) |
| | |
| | | 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) |
| | | } |
| | | } |
| | | } |
| | | } |