杨锴
2024-09-04 5dc5755468523e46c2314699d7b54e98c3329015
fix ani
6个文件已修改
2个文件已删除
6个文件已添加
199 ■■■■■ 已修改文件
XQMuse.xcodeproj/project.pbxproj 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Anis/Contents.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Assets.xcassets/Placeholder/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-1.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-2.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-3.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-4.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-5.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/Pngs/apngb-animated.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/Pngs/apngb-animated_sun.png 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/TreeTeskVC.swift 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse/Root/TreeGroup/mov/bg_movie.mov 补丁 | 查看 | 原始文档 | blame | 历史
XQMuse.xcodeproj/project.pbxproj
@@ -203,12 +203,16 @@
        13A6594F2C6F641100F731FA /* CourseDetail_2_Inner_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A6594C2C6F641100F731FA /* CourseDetail_2_Inner_TCell.swift */; };
        13B021DB2C75DD0600414769 /* BankWithdrawVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B021DA2C75DD0600414769 /* BankWithdrawVC.xib */; };
        13B021DC2C75DD0600414769 /* BankWithdrawVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13B021D92C75DD0600414769 /* BankWithdrawVC.swift */; };
        13B06A082C78A0D300477FA9 /* apngb-animated.png in Resources */ = {isa = PBXBuildFile; fileRef = 13B06A072C78A0D300477FA9 /* apngb-animated.png */; };
        13B06A082C78A0D300477FA9 /* apngb-animated-level-1.png in Resources */ = {isa = PBXBuildFile; fileRef = 13B06A072C78A0D300477FA9 /* apngb-animated-level-1.png */; };
        13BA27132C81B6DD006D4CD1 /* SourceHanSerifCN-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = 13BA27122C81B6DD006D4CD1 /* SourceHanSerifCN-Light.otf */; };
        13BF65D82C80402500E20F0E /* bg_movie.mov in Resources */ = {isa = PBXBuildFile; fileRef = 13BF65D72C80402500E20F0E /* bg_movie.mov */; };
        13BF65DC2C80407600E20F0E /* PlanGuideVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13BF65DA2C80407600E20F0E /* PlanGuideVC.swift */; };
        13BF65DD2C80407600E20F0E /* PlanGuideVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13BF65DB2C80407600E20F0E /* PlanGuideVC.xib */; };
        13BF65EB2C804BE100E20F0E /* apngb-animated-flow.png in Resources */ = {isa = PBXBuildFile; fileRef = 13BF65EA2C804BE100E20F0E /* apngb-animated-flow.png */; };
        13C583882C86A29A0071BCBE /* apngb-animated-level-2.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C583872C86A29A0071BCBE /* apngb-animated-level-2.png */; };
        13C5838A2C86A42B0071BCBE /* apngb-animated-level-3.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C583892C86A42B0071BCBE /* apngb-animated-level-3.png */; };
        13C5838C2C86A4770071BCBE /* apngb-animated-level-4.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C5838B2C86A4770071BCBE /* apngb-animated-level-4.png */; };
        13C5838E2C86A4F90071BCBE /* apngb-animated-level-5.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C5838D2C86A4F90071BCBE /* apngb-animated-level-5.png */; };
        13CBC5D92C73532B00BC66C7 /* MeVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13CBC5D82C73532B00BC66C7 /* MeVC.xib */; };
        13CBCCDF2C74793D00C67701 /* NoticeCenterSysDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CBCCDD2C74793D00C67701 /* NoticeCenterSysDetailVC.swift */; };
        13CBCCE02C74793D00C67701 /* NoticeCenterSysDetailVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13CBCCDE2C74793D00C67701 /* NoticeCenterSysDetailVC.xib */; };
@@ -450,12 +454,16 @@
        13A6594D2C6F641100F731FA /* CourseDetail_2_Inner_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseDetail_2_Inner_TCell.xib; sourceTree = "<group>"; };
        13B021D92C75DD0600414769 /* BankWithdrawVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BankWithdrawVC.swift; sourceTree = "<group>"; };
        13B021DA2C75DD0600414769 /* BankWithdrawVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BankWithdrawVC.xib; sourceTree = "<group>"; };
        13B06A072C78A0D300477FA9 /* apngb-animated.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated.png"; sourceTree = "<group>"; };
        13B06A072C78A0D300477FA9 /* apngb-animated-level-1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-1.png"; sourceTree = "<group>"; };
        13BA27122C81B6DD006D4CD1 /* SourceHanSerifCN-Light.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceHanSerifCN-Light.otf"; sourceTree = "<group>"; };
        13BF65D72C80402500E20F0E /* bg_movie.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = bg_movie.mov; sourceTree = "<group>"; };
        13BF65DA2C80407600E20F0E /* PlanGuideVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanGuideVC.swift; sourceTree = "<group>"; };
        13BF65DB2C80407600E20F0E /* PlanGuideVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PlanGuideVC.xib; sourceTree = "<group>"; };
        13BF65EA2C804BE100E20F0E /* apngb-animated-flow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-flow.png"; sourceTree = "<group>"; };
        13C583872C86A29A0071BCBE /* apngb-animated-level-2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-2.png"; sourceTree = "<group>"; };
        13C583892C86A42B0071BCBE /* apngb-animated-level-3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-3.png"; sourceTree = "<group>"; };
        13C5838B2C86A4770071BCBE /* apngb-animated-level-4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-4.png"; sourceTree = "<group>"; };
        13C5838D2C86A4F90071BCBE /* apngb-animated-level-5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-5.png"; sourceTree = "<group>"; };
        13CBC5D82C73532B00BC66C7 /* MeVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MeVC.xib; sourceTree = "<group>"; };
        13CBCCDD2C74793D00C67701 /* NoticeCenterSysDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoticeCenterSysDetailVC.swift; sourceTree = "<group>"; };
        13CBCCDE2C74793D00C67701 /* NoticeCenterSysDetailVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NoticeCenterSysDetailVC.xib; sourceTree = "<group>"; };
@@ -762,7 +770,11 @@
            children = (
                13BF65EA2C804BE100E20F0E /* apngb-animated-flow.png */,
                135C2A4F2C7EC48D00CC2A67 /* apngb-animated_sun.png */,
                13B06A072C78A0D300477FA9 /* apngb-animated.png */,
                13B06A072C78A0D300477FA9 /* apngb-animated-level-1.png */,
                13C583872C86A29A0071BCBE /* apngb-animated-level-2.png */,
                13C583892C86A42B0071BCBE /* apngb-animated-level-3.png */,
                13C5838B2C86A4770071BCBE /* apngb-animated-level-4.png */,
                13C5838D2C86A4F90071BCBE /* apngb-animated-level-5.png */,
            );
            path = Pngs;
            sourceTree = "<group>";
@@ -1178,6 +1190,7 @@
                1333DC7E2C72E7A500D8ACAE /* CourseSendGiftView.xib in Resources */,
                132C40292C816003002E3270 /* SourceHanSerifCN-Medium.otf in Resources */,
                137ABE352C6B3F64003A91C5 /* ForgotPasswordVC.xib in Resources */,
                13C5838A2C86A42B0071BCBE /* apngb-animated-level-3.png in Resources */,
                13A0A8A52C746B5600DF08B6 /* CommonDatePickerView.xib in Resources */,
                13A37A012C75C1DE0038D5C8 /* LevelVC.xib in Resources */,
                1324A6452C805B4000AA5098 /* FlyFlowerSong.otf in Resources */,
@@ -1185,11 +1198,12 @@
                1327C6832C81D107005DA44B /* PlanGuide_3_VC.xib in Resources */,
                138FE0DF2C757B2A00A964E8 /* BindPhone_1_VC.xib in Resources */,
                13FB6D842C6EEFE900A0685D /* MenuListTCell.xib in Resources */,
                13B06A082C78A0D300477FA9 /* apngb-animated.png in Resources */,
                13B06A082C78A0D300477FA9 /* apngb-animated-level-1.png in Resources */,
                138F0C362C7597CA0072A16C /* HelpCenterVC.xib in Resources */,
                134803D72C76E3E000F4FDDA /* WatchHistoryVC.xib in Resources */,
                1377768E2C6AFD25004FF994 /* LoginVC.xib in Resources */,
                134CC7E02C73283700EAEFB7 /* PavilionSearchVC.xib in Resources */,
                13C5838C2C86A4770071BCBE /* apngb-animated-level-4.png in Resources */,
                130913EE2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.xib in Resources */,
                13CBCCE02C74793D00C67701 /* NoticeCenterSysDetailVC.xib in Resources */,
                130ED7E82C6AEF5900D0736E /* Home_Style_4_TCell.xib in Resources */,
@@ -1222,6 +1236,7 @@
                138FE0E32C757DE900A964E8 /* BindPhone_2_VC.xib in Resources */,
                130F94672C7DAB27003A348B /* SearchHistoryCCell.xib in Resources */,
                139C165A2C6A053000A924D9 /* Home_Style_2_TCell.xib in Resources */,
                13C583882C86A29A0071BCBE /* apngb-animated-level-2.png in Resources */,
                1300BD3B2C6DFB1C000BCA5E /* VIPCenterVC.xib in Resources */,
                139466482C6B8E0200F6FB15 /* UpdatePhoneVC.xib in Resources */,
                134A453A2C6E167D00538D78 /* CourseOfficalCommendTopCCell.xib in Resources */,
@@ -1233,6 +1248,7 @@
                137776932C6AFE69004FF994 /* SearchVC.xib in Resources */,
                132DB8FF2C74826D00EF33A7 /* SettingVC.xib in Resources */,
                13985DBF2C69DDF90046B6DC /* HomeTopMenuView.xib in Resources */,
                13C5838E2C86A4F90071BCBE /* apngb-animated-level-5.png in Resources */,
                1385E00B2C6C57A900AADB1F /* HomeItemDetailVC.xib in Resources */,
                13B021DB2C75DD0600414769 /* BankWithdrawVC.xib in Resources */,
                1338A6DE2C76DD5E006CDD15 /* SpendingDetailInfoVC.xib in Resources */,
XQMuse/.DS_Store
Binary files differ
XQMuse/Assets.xcassets/.DS_Store
Binary files differ
XQMuse/Assets.xcassets/Anis/Contents.json
File was deleted
XQMuse/Assets.xcassets/Placeholder/.DS_Store
Binary files differ
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-1.png
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-2.png
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-3.png
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-4.png
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-5.png
XQMuse/Root/TreeGroup/Pngs/apngb-animated.png
Binary files differ
XQMuse/Root/TreeGroup/Pngs/apngb-animated_sun.png

XQMuse/Root/TreeGroup/TreeTeskVC.swift
@@ -10,6 +10,34 @@
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 = {
@@ -29,6 +57,12 @@
                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) {
@@ -52,7 +86,7 @@
    override func viewDidLoad() {
        super.viewDidLoad()
                                treeLevel = .level_1
    }
                override func setUI() {
@@ -70,19 +104,7 @@
                                                }
                                                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() {
@@ -108,47 +130,92 @@
                @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)
                }
}
XQMuse/Root/TreeGroup/mov/bg_movie.mov
Binary files differ