| | |
| | | |
| | | class TreeTeskVC: BaseVC { |
| | | |
| | | @IBOutlet weak var view_energy: UIView! |
| | | @IBOutlet weak var icon_energy: UILabel! |
| | | @IBOutlet weak var btn_exchange: TapBtn! |
| | | @IBOutlet weak var btn_watering: UIButton! |
| | | @IBOutlet weak var view_group: UIView! |
| | | @IBOutlet weak var view_group_inner: UIView! |
| | | @IBOutlet weak var btn_seedingAgain: UIButton! |
| | | @IBOutlet weak var view_progressTotal: UIView! |
| | | @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") |
| | | let p = AVPlayer(url: bgPath!) |
| | |
| | | }() |
| | | |
| | | private lazy var playerLayer:AVPlayerLayer = { |
| | | let pLayer = AVPlayerLayer() |
| | | let pLayer = AVPlayerLayer() |
| | | pLayer.videoGravity = .resize |
| | | return pLayer |
| | | }() |
| | | |
| | | private lazy var taskListView:TreeTeskListView = { |
| | | let view = TreeTeskListView.jq_loadNibView() |
| | | return view |
| | | }() |
| | | |
| | | private var treeTeskListSwipe:TreeTeskListSwipe = .down |
| | | private var settingModel = UserDefaultSettingViewModel.getSetting() |
| | | |
| | | private var treeImage = UIImageView() |
| | | private var aPNGTreeImageView:APNGImageView? |
| | |
| | | override func viewDidLayoutSubviews() { |
| | | super.viewDidLayoutSubviews() |
| | | playerLayer.frame = view.frame |
| | | |
| | | view.bringSubviewToFront(self.view_energy) |
| | | view.bringSubviewToFront(self.btn_exchange) |
| | | view.bringSubviewToFront(self.btn_watering) |
| | | view.bringSubviewToFront(self.view_group) |
| | | view.bringSubviewToFront(self.btn_seedingAgain) |
| | | view.bringSubviewToFront(self.taskListView) |
| | | |
| | | btn_seedingAgain.jq_borderWidth = 1 |
| | | btn_seedingAgain.jq_borderColor = UIColor(hexString: "#8AAE65") |
| | | btn_seedingAgain.jq_addShadows(shadowColor: .white, corner: 20, radius: 5, offset: CGSize(width: 0, height: 0), opacity: 1) |
| | | |
| | | taskListView.jq_addCorners(corner: [.topLeft,.topRight], radius: 20) |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "树苗打卡站" |
| | | treeLevel = .level_1 |
| | | } |
| | | |
| | | if settingModel!.userFirstOpenTreeTask{ |
| | | DispatchQueue.main.asyncAfter(delay: 2.0) { |
| | | let h = (JQ_ScreenW - 90) * 0.8766 |
| | | TreeTeskFirstRuleView.show(title: "心泉之树", content:"亲爱的家人,感谢您用心的交流。\n现在,您心灵之树的种子已经植入这片沃土,请以农夫的心态用心浇灌,不久的将来,将会长成苍天大树,结出丰硕的果实。加油哦!",textAlignment: .left,height: h,textTopOffset: 22) |
| | | } |
| | | } |
| | | |
| | | 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) |
| | | } |
| | | |
| | | } |
| | | |
| | | override func setUI() { |
| | | |
| | | let btn = UIButton(type: .custom) |
| | | btn.setTitle("规则说明", for: .normal) |
| | | btn.setTitleColor(.black.withAlphaComponent(0.55), for: .normal) |
| | | btn.titleLabel?.font = .systemFont(ofSize: 14, weight: .medium) |
| | | btn.addTarget(self, action: #selector(ruleAction), for: .touchUpInside) |
| | | |
| | | navigationItem.rightBarButtonItem = UIBarButtonItem(customView: btn) |
| | | |
| | | btn_exchange.jq_cornerPartWithNib(byRoundingCorners: [.topLeft,.bottomLeft], radii: 17.5, size: CGSizeMake(98, 35)) |
| | | |
| | | playerLayer.player = player |
| | | view.layer.addSublayer(playerLayer) |
| | | player.play() |
| | | |
| | | 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")!){ |
| | | 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) |
| | | taskListView.snp.makeConstraints { make in |
| | | make.left.right.equalToSuperview() |
| | | make.bottom.equalToSuperview().offset((JQ_ScreenW * 0.655 - 50)) |
| | | make.height.equalTo(JQ_ScreenW * 0.655) |
| | | } |
| | | } |
| | | |
| | | override func setRx() { |
| | |
| | | self?.aPNGTreeImageView?.startAnimating() |
| | | } |
| | | } |
| | | |
| | | taskListView.swipeClouse {[unowned self] dirition in |
| | | guard self.treeTeskListSwipe != dirition else {return} |
| | | self.treeTeskListSwipe = dirition |
| | | switch dirition{ |
| | | case .down: |
| | | UIView.animate(withDuration: 0.3) { |
| | | self.taskListView.snp.updateConstraints { make in |
| | | make.left.right.equalToSuperview() |
| | | make.bottom.equalToSuperview().offset((JQ_ScreenW * 0.655 - 50)) |
| | | make.height.equalTo(JQ_ScreenW * 0.655) |
| | | } |
| | | self.view.layoutIfNeeded() |
| | | } |
| | | case .up: |
| | | UIView.animate(withDuration: 0.3) { |
| | | self.taskListView.snp.updateConstraints { make in |
| | | make.left.right.equalToSuperview() |
| | | make.bottom.equalToSuperview() |
| | | make.height.equalTo(JQ_ScreenW * 0.655) |
| | | } |
| | | self.view.layoutIfNeeded() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 0 - 100 |
| | | private func setProgress(current:Int,total:Int){ |
| | | |
| | | let pix = view_progressTotal.height / Double(total) |
| | | let px = Double(current) * pix |
| | | let max = view_progressTotal.height - 5 |
| | | cons_progressHei.constant = min(px,max) |
| | | |
| | | self.label_progress.attributedText = AttributedStringbuilder.build().add(string: "\(current)", withFont: .systemFont(ofSize: 12, weight: .bold), withColor: .white, indent: 0, lineSpace: 0).add(string: "\n/\(total)", withFont: .systemFont(ofSize: 11,weight: .thin), withColor: .white).mutableAttributedString |
| | | self.label_progress.textAlignment = .center |
| | | |
| | | UIView.animate(withDuration: 1.5) { |
| | | self.view_progressTotal.layoutIfNeeded() |
| | | self.view_progress.jq_gradientColor(colorArr: [UIColor(hexString: "#FCFECA")!.cgColor,UIColor(hexString: "#3CB56A")!.cgColor], cornerRadius: 2.5,startPoint: CGPoint(x: 0, y: 0),endPoint: CGPoint(x: 1, y: 1),clear: true) |
| | | } |
| | | } |
| | | |
| | | //能量明细 |
| | | @IBAction func energyDetailAction(_ sender: TapBtn) { |
| | | |
| | | let vc = TreeTeskDetailVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | //兑换 |
| | | @IBAction func exchangeAction(_ sender: TapBtn) { |
| | | let vc = TreeTeskEnergyExchangeVC() |
| | | push(vc: vc) |
| | | } |
| | | |
| | | @IBAction func wateringAction(_ sender: UIButton) { |
| | | 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() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | @objc func jumpAction(){ |
| | | |
| | | treeLevel = TreeLevel(rawValue: treeLevel.rawValue + 1) ?? TreeLevel.level_1 |
| | | } |
| | | |
| | | |
| | | // 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() |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | @objc func ruleAction(){ |
| | | let vc = WebVC(type: .treeRule) |
| | | vc.title = "规则说明" |
| | | push(vc: vc) |
| | | } |
| | | |
| | | private func updateAni(){ |
| | |
| | | view.addSubview(aPNGTreeImageView!) |
| | | } |
| | | |
| | | // aPNGTreeImageView!.backgroundColor = .red.withAlphaComponent(0.1) |
| | | // aPNGTreeImageView!.backgroundColor = .red.withAlphaComponent(0.1) |
| | | let scale:Double = 0.55 |
| | | |
| | | aPNGTreeImageView!.snp.remakeConstraints { make in |