| | |
| | | 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" |
| | | } |
| | | } |
| | | } |
| | | |
| | | class TreeTeskVC: BaseVC { |
| | | |
| | | private lazy var player:AVPlayer = { |
| | |
| | | private var aPNGTreeImageView:APNGImageView? |
| | | private var aPNGSunImageView:APNGImageView? |
| | | private var aPNGActionImageView:APNGImageView? |
| | | |
| | | private var treeLevel:TreeLevel = .level_5{ |
| | | didSet{ |
| | | updateAni() |
| | | } |
| | | } |
| | | |
| | | |
| | | override func viewDidDisappear(_ animated: Bool) { |
| | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | |
| | | treeLevel = .level_1 |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | } |
| | | aPNGSunImageView!.startAnimating() |
| | | } |
| | | |
| | | |
| | | if let treeApngImage = try? APNGImage(fileURL: Bundle.main.url(forResource: "apngb-animated", withExtension: "png")!){ |
| | | treeApngImage.numberOfPlays = 1 |
| | | aPNGTreeImageView = APNGImageView(image: treeApngImage) |
| | | let tap = UITapGestureRecognizer(target: self, action: #selector(jumpAction)) |
| | | aPNGTreeImageView!.addGestureRecognizer(tap) |
| | | view.addSubview(aPNGTreeImageView!) |
| | | aPNGTreeImageView!.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview() |
| | | } |
| | | aPNGTreeImageView!.startAnimating() |
| | | } |
| | | updateAni() |
| | | } |
| | | |
| | | override func setRx() { |
| | |
| | | |
| | | @objc func jumpAction(){ |
| | | |
| | | 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() |
| | | treeLevel = TreeLevel(rawValue: treeLevel.rawValue + 1) ?? TreeLevel.level_1 |
| | | |
| | | 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() |
| | | } |
| | | |
| | | // 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() |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | } |
| | | |
| | | private func updateAni(){ |
| | | |
| | | guard let url = Bundle.main.url(forResource: treeLevel.aniResource, withExtension: "png") else {return} |
| | | if let treeApngImage = try? APNGImage(fileURL: url){ |
| | | |
| | | 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) |
| | | }else{ |
| | | aPNGTreeImageView?.image = treeApngImage |
| | | } |
| | | |
| | | if view.viewWithTag(10101) == nil{ |
| | | view.addSubview(aPNGTreeImageView!) |
| | | } |
| | | |
| | | aPNGTreeImageView!.backgroundColor = .red.withAlphaComponent(0.3) |
| | | let scale:Double = 0.7 |
| | | |
| | | aPNGTreeImageView!.snp.remakeConstraints { make in |
| | | make.centerX.equalToSuperview() |
| | | make.bottom.equalToSuperview().offset(-220) |
| | | |
| | | switch treeLevel { |
| | | case .level_1: |
| | | make.width.equalTo(184 * scale) |
| | | make.height.equalTo(124 * scale) |
| | | |
| | | case .level_2: |
| | | make.width.equalTo(255 * scale) |
| | | make.height.equalTo(193 * scale) |
| | | |
| | | case .level_3: |
| | | make.width.equalTo(243 * scale) |
| | | make.height.equalTo(237 * scale) |
| | | case .level_4: |
| | | make.width.equalTo(245 * scale) |
| | | make.height.equalTo(280 * scale) |
| | | case .level_5: |
| | | make.width.equalTo(479 * scale) |
| | | make.height.equalTo(389 * scale) |
| | | } |
| | | } |
| | | |
| | | aPNGTreeImageView!.startAnimating() |
| | | } |
| | | |
| | | |
| | | |
| | | // let springAnimation = CASpringAnimation(keyPath: "transform.scale.y") |
| | | // springAnimation.fromValue = 1 |
| | | // springAnimation.toValue = 1.06 |
| | | // springAnimation.initialVelocity = 0.5 //初速度 |
| | | // springAnimation.repeatCount = 1 |
| | | // springAnimation.duration = 3.0 |
| | | // springAnimation.mass = 0.4 //增加该值会增大弹性效果,即震动次数更多、幅度更大 |
| | | // springAnimation.stiffness = 100 //增大stiffness会减少震动次数,减小 |
| | | // springAnimation.damping = 1 |
| | | // springAnimation.isRemovedOnCompletion = false |
| | | // springAnimation.fillMode = .forwards |
| | | // aPNGTreeImageView?.layer.add(springAnimation, forKey: nil) |
| | | } |
| | | } |
| | | |