//
|
// TreeTeskVC.swift
|
// XQMuse
|
//
|
// Created by 无故事王国 on 2024/8/23.
|
//
|
|
import UIKit
|
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"
|
}
|
}
|
}
|
|
class TreeTeskVC: BaseVC {
|
|
private lazy var player:AVPlayer = {
|
let bgPath = Bundle.main.url(forResource: "bg", withExtension: "mov")
|
let p = AVPlayer(url: bgPath!)
|
p.isMuted = true
|
return p
|
}()
|
|
private lazy var playerLayer:AVPlayerLayer = {
|
let pLayer = AVPlayerLayer()
|
pLayer.videoGravity = .resize
|
return pLayer
|
}()
|
|
private var treeImage = UIImageView()
|
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) {
|
super.viewDidDisappear(animated)
|
player.pause()
|
aPNGSunImageView?.stopAnimating()
|
aPNGTreeImageView?.stopAnimating()
|
}
|
|
override func viewDidAppear(_ animated: Bool) {
|
player.play()
|
aPNGSunImageView?.startAnimating()
|
aPNGTreeImageView?.startAnimating()
|
}
|
|
override func viewDidLayoutSubviews() {
|
super.viewDidLayoutSubviews()
|
playerLayer.frame = view.frame
|
}
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
|
treeLevel = .level_1
|
}
|
|
override func setUI() {
|
playerLayer.player = player
|
view.layer.addSublayer(playerLayer)
|
player.play()
|
|
|
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!.snp.makeConstraints { make in
|
make.edges.equalToSuperview()
|
}
|
aPNGSunImageView!.startAnimating()
|
}
|
updateAni()
|
}
|
|
override func setRx() {
|
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: nil, queue: nil) { [weak self] _ in
|
self?.player.seek(to: CMTime.zero)
|
self?.player.play()
|
}
|
|
NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: nil, queue: nil) { [weak self] _ in
|
self?.player.pause()
|
self?.aPNGSunImageView?.stopAnimating()
|
self?.aPNGTreeImageView?.stopAnimating()
|
}
|
|
NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: nil) { [weak self] _ in
|
if self?.navigationController?.tabBarController?.selectedIndex == 2{
|
self?.player.play()
|
self?.aPNGSunImageView?.startAnimating()
|
self?.aPNGTreeImageView?.startAnimating()
|
}
|
}
|
}
|
|
@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()
|
// }
|
// }
|
// }
|
// }
|
}
|
|
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()
|
}
|
}
|
}
|
|
extension TreeTeskVC:CAAnimationDelegate{
|
func animationDidStart(_ anim: CAAnimation) {
|
print("开始动画")
|
treeImage.isUserInteractionEnabled = false
|
}
|
|
func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
|
print("结束动画")
|
if anim.value(forKey: "customType") as! String == "ani_flower"{
|
|
|
}
|
}
|
}
|