From 99d75582ac54d11f6e9e054bdf0d735887b0d48b Mon Sep 17 00:00:00 2001 From: zeng Date: Thu, 23 Oct 2025 15:53:39 +0800 Subject: [PATCH] 1 --- Fableon.xcodeproj/project.pbxproj | 164 ++++++++++++++ .../Base/Controller/FAViewController.swift | 8 +- Fableon/Base/Extension/Date+FAAdd.swift | 31 +++ Fableon/Base/Extension/UIScreen+FAAdd.swift | 9 + Fableon/Base/Request/FAAPI/FAAPI.swift | 81 +++++++ Fableon/Base/View/FAGradientButton.swift | 44 ++++ Fableon/Base/View/FAGradientView.swift | 44 ++++ Fableon/Base/View/FAScrollView.swift | 10 +- .../Base/WebView/FAAppWebViewController.swift | 12 +- .../FABaseWebViewController+Script.swift | 104 +++++++++ .../WebView/FABaseWebViewController.swift | 2 +- Fableon/Base/WebView/FAWebMessageModel.swift | 24 ++ Fableon/Base/WebView/FAWebView.swift | 4 + .../Home/C/FAGenresListViewController.swift | 57 ++++- .../Class/Home/C/FAGenresViewController.swift | 23 +- .../Home/C/FANewListViewController.swift | 119 ++++++++++ .../Home/C/FAPopularListViewController.swift | 121 ++++++++++ .../Home/C/FARankingListViewController.swift | 128 +++++++++++ Fableon/Class/Home/M/FACategoryModel.swift | 16 ++ Fableon/Class/Home/M/FAPopularModel.swift | 15 ++ .../Home/UI/FAHomeMustSeeContentView.swift | 12 +- .../Home/UI/FAHomeMustSeeShortView.swift | 2 +- Fableon/Class/Home/V/FAGenresCell.swift | 19 +- Fableon/Class/Home/V/FAGenresCell.xib | 1 + Fableon/Class/Home/V/FAGenresListCell.swift | 13 +- Fableon/Class/Home/V/FAGenresListCell.xib | 4 + Fableon/Class/Home/V/FARankingListCell.swift | 42 ++++ Fableon/Class/Home/V/FARankingListCell.xib | 119 ++++++++++ .../Home/V/FARankingListHeaderView.swift | 212 ++++++++++++++++++ Fableon/Class/Home/VM/FAHomeViewModel.swift | 24 +- .../Class/Me/C/FAFeedbackViewController.swift | 17 +- .../Class/Me/C/FAMeListViewController.swift | 154 +++++++++++++ Fableon/Class/Me/C/FAMeViewController.swift | 161 ++++--------- Fableon/Class/Me/M/FAMeItemModel.swift | 6 + Fableon/Class/Me/V/FAMeCoinsView.swift | 83 +++++++ Fableon/Class/Me/V/FAMeHeaderView.swift | 46 +++- .../Class/Me/V/FAMeTableViewHeaderView.swift | 165 ++++++++++++++ .../Class/Player/M/FAVideoUnlockResult.swift | 26 +++ Fableon/Class/Player/V/FAEpSelectorCell.swift | 5 + Fableon/Class/Player/V/FAEpSelectorCell.xib | 9 + .../Class/Player/V/FAPlayerDetailCell.swift | 35 +++ .../Player/V/FAPlayerDetailControlView.swift | 6 +- Fableon/Class/Player/V/FAVideoLockView.swift | 80 +++++++ .../VC/FAPlayerDetailViewController.swift | 20 +- .../Player/VM/FAShortDetailViewModel.swift | 56 +++++ .../Store/C/FACoinRecordViewController.swift | 52 +++++ .../FAConsumptionRecordsViewController.swift | 66 ++++++ .../C/FAOrderRecordsViewController.swift | 112 +++++++++ .../Store/C/FARewardCoinsViewController.swift | 55 +++++ .../Class/Store/C/FAStoreViewController.swift | 58 +++++ .../Store/C/FAVipRecordViewController.swift | 53 +++++ .../Store/C/FAWalletViewController.swift | 115 ++++++++++ .../Store/V/FAConsumptionRecordsCell.swift | 37 +++ .../Store/V/FAConsumptionRecordsCell.xib | 80 +++++++ Fableon/Class/Store/V/FAOrderRecordCell.swift | 33 +++ Fableon/Class/Store/V/FAOrderRecordCell.xib | 76 +++++++ Fableon/Class/Store/V/FARewardCoinsCell.swift | 43 ++++ Fableon/Class/Store/V/FARewardCoinsCell.xib | 106 +++++++++ Fableon/Class/Store/V/FAWalletCell.swift | 33 +++ Fableon/Class/Store/V/FAWalletCell.xib | 52 +++++ .../Class/Store/V/FAWalletHeaderView.swift | 158 +++++++++++++ Fableon/Libs/FALogin/FAUserInfo.swift | 16 ++ .../color/#105C91.colorset/Contents.json | 20 ++ .../color/#1680FB.colorset/Contents.json | 20 ++ .../color/#3A271E.colorset/Contents.json | 20 ++ .../color/#74BBFF.colorset/Contents.json | 20 ++ .../color/#79A7DB.colorset/Contents.json | 20 ++ .../color/#7FDBF5.colorset/Contents.json | 20 ++ .../color/#C3FAFF.colorset/Contents.json | 20 ++ .../color/#F7F497.colorset/Contents.json | 20 ++ .../color/#FFFFFF_0.8.colorset/Contents.json | 20 ++ .../Frame 2085663258.imageset/Contents.json | 25 +++ .../Frame 2085663258@2x.png | Bin 0 -> 521 bytes .../Frame 2085663258@3x.png | Bin 0 -> 669 bytes .../image/Frame 3021.imageset/Contents.json | 22 ++ .../Frame 3021.imageset/Frame 3021@2x.png | Bin 0 -> 564 bytes .../Frame 3021.imageset/Frame 3021@3x.png | Bin 0 -> 798 bytes .../coins_icon_01.imageset/Contents.json | 22 ++ .../image/coins_icon_01.imageset/金币@2x.png | Bin 0 -> 7036 bytes .../image/coins_icon_01.imageset/金币@3x.png | Bin 0 -> 13953 bytes .../coins_icon_02.imageset/Contents.json | 22 ++ .../image/coins_icon_02.imageset/金币@2x.png | Bin 0 -> 7036 bytes .../image/coins_icon_02.imageset/金币@3x.png | Bin 0 -> 13953 bytes .../coins_icon_03.imageset/Contents.json | 22 ++ .../image/coins_icon_03.imageset/金币@2x.png | Bin 0 -> 2238 bytes .../image/coins_icon_03.imageset/金币@3x.png | Bin 0 -> 4356 bytes .../image/lock_icon_01.imageset/Contents.json | 22 ++ .../image/lock_icon_01.imageset/Frame@2x.png | Bin 0 -> 325 bytes .../image/lock_icon_01.imageset/Frame@3x.png | Bin 0 -> 473 bytes .../image/lock_icon_02.imageset/Contents.json | 22 ++ .../lock_icon_02.imageset/Frame 2958@2x.png | Bin 0 -> 1004 bytes .../lock_icon_02.imageset/Frame 2958@3x.png | Bin 0 -> 1379 bytes .../image/time icon.imageset/Contents.json | 22 ++ .../image/time icon.imageset/time icon@2x.png | Bin 0 -> 770 bytes .../image/time icon.imageset/time icon@3x.png | Bin 0 -> 1084 bytes .../image/vip_image_01.imageset/Contents.json | 22 ++ .../image/vip_image_01.imageset/Frame@2x.png | Bin 0 -> 23130 bytes .../image/vip_image_01.imageset/Frame@3x.png | Bin 0 -> 42853 bytes .../image/vip_image_02.imageset/Contents.json | 22 ++ .../image/vip_image_02.imageset/Frame@2x.png | Bin 0 -> 44584 bytes .../image/vip_image_02.imageset/Frame@3x.png | Bin 0 -> 88406 bytes .../image/皇冠1.imageset/Contents.json | 22 ++ .../image/皇冠1.imageset/皇冠1@2x.png | Bin 0 -> 1873 bytes .../image/皇冠1.imageset/皇冠1@3x.png | Bin 0 -> 2612 bytes .../image/皇冠2.imageset/Contents.json | 22 ++ .../image/皇冠2.imageset/皇冠2@2x.png | Bin 0 -> 2082 bytes .../image/皇冠2.imageset/皇冠2@3x.png | Bin 0 -> 3063 bytes .../image/皇冠3.imageset/Contents.json | 22 ++ .../image/皇冠3.imageset/皇冠3@2x.png | Bin 0 -> 2218 bytes .../image/皇冠3.imageset/皇冠3@3x.png | Bin 0 -> 3178 bytes Fableon/Source/en.lproj/Localizable.strings | 39 +++- Podfile | 3 + Podfile.lock | 17 +- 113 files changed, 3852 insertions(+), 154 deletions(-) create mode 100644 Fableon/Base/Extension/Date+FAAdd.swift create mode 100644 Fableon/Base/View/FAGradientButton.swift create mode 100644 Fableon/Base/View/FAGradientView.swift create mode 100644 Fableon/Base/WebView/FABaseWebViewController+Script.swift create mode 100644 Fableon/Base/WebView/FAWebMessageModel.swift create mode 100644 Fableon/Class/Home/C/FANewListViewController.swift create mode 100644 Fableon/Class/Home/C/FAPopularListViewController.swift create mode 100644 Fableon/Class/Home/C/FARankingListViewController.swift create mode 100644 Fableon/Class/Home/M/FACategoryModel.swift create mode 100644 Fableon/Class/Home/M/FAPopularModel.swift create mode 100644 Fableon/Class/Home/V/FARankingListCell.swift create mode 100644 Fableon/Class/Home/V/FARankingListCell.xib create mode 100644 Fableon/Class/Home/V/FARankingListHeaderView.swift create mode 100644 Fableon/Class/Me/C/FAMeListViewController.swift create mode 100644 Fableon/Class/Me/V/FAMeCoinsView.swift create mode 100644 Fableon/Class/Me/V/FAMeTableViewHeaderView.swift create mode 100644 Fableon/Class/Player/M/FAVideoUnlockResult.swift create mode 100644 Fableon/Class/Player/V/FAVideoLockView.swift create mode 100644 Fableon/Class/Store/C/FACoinRecordViewController.swift create mode 100644 Fableon/Class/Store/C/FAConsumptionRecordsViewController.swift create mode 100644 Fableon/Class/Store/C/FAOrderRecordsViewController.swift create mode 100644 Fableon/Class/Store/C/FARewardCoinsViewController.swift create mode 100644 Fableon/Class/Store/C/FAStoreViewController.swift create mode 100644 Fableon/Class/Store/C/FAVipRecordViewController.swift create mode 100644 Fableon/Class/Store/C/FAWalletViewController.swift create mode 100644 Fableon/Class/Store/V/FAConsumptionRecordsCell.swift create mode 100644 Fableon/Class/Store/V/FAConsumptionRecordsCell.xib create mode 100644 Fableon/Class/Store/V/FAOrderRecordCell.swift create mode 100644 Fableon/Class/Store/V/FAOrderRecordCell.xib create mode 100644 Fableon/Class/Store/V/FARewardCoinsCell.swift create mode 100644 Fableon/Class/Store/V/FARewardCoinsCell.xib create mode 100644 Fableon/Class/Store/V/FAWalletCell.swift create mode 100644 Fableon/Class/Store/V/FAWalletCell.xib create mode 100644 Fableon/Class/Store/V/FAWalletHeaderView.swift create mode 100644 Fableon/Source/Assets.xcassets/color/#105C91.colorset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/color/#1680FB.colorset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/color/#3A271E.colorset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/color/#74BBFF.colorset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/color/#79A7DB.colorset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/color/#7FDBF5.colorset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/color/#C3FAFF.colorset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/color/#F7F497.colorset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/color/#FFFFFF_0.8.colorset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/Frame 2085663258.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/Frame 2085663258.imageset/Frame 2085663258@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/Frame 2085663258.imageset/Frame 2085663258@3x.png create mode 100644 Fableon/Source/Assets.xcassets/image/Frame 3021.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/Frame 3021.imageset/Frame 3021@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/Frame 3021.imageset/Frame 3021@3x.png create mode 100644 Fableon/Source/Assets.xcassets/image/coins_icon_01.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/coins_icon_01.imageset/金币@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/coins_icon_01.imageset/金币@3x.png create mode 100644 Fableon/Source/Assets.xcassets/image/coins_icon_02.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/coins_icon_02.imageset/金币@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/coins_icon_02.imageset/金币@3x.png create mode 100644 Fableon/Source/Assets.xcassets/image/coins_icon_03.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/coins_icon_03.imageset/金币@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/coins_icon_03.imageset/金币@3x.png create mode 100644 Fableon/Source/Assets.xcassets/image/lock_icon_01.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/lock_icon_01.imageset/Frame@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/lock_icon_01.imageset/Frame@3x.png create mode 100644 Fableon/Source/Assets.xcassets/image/lock_icon_02.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/lock_icon_02.imageset/Frame 2958@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/lock_icon_02.imageset/Frame 2958@3x.png create mode 100644 Fableon/Source/Assets.xcassets/image/time icon.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/time icon.imageset/time icon@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/time icon.imageset/time icon@3x.png create mode 100644 Fableon/Source/Assets.xcassets/image/vip_image_01.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/vip_image_01.imageset/Frame@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/vip_image_01.imageset/Frame@3x.png create mode 100644 Fableon/Source/Assets.xcassets/image/vip_image_02.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/vip_image_02.imageset/Frame@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/vip_image_02.imageset/Frame@3x.png create mode 100644 Fableon/Source/Assets.xcassets/image/皇冠1.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/皇冠1.imageset/皇冠1@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/皇冠1.imageset/皇冠1@3x.png create mode 100644 Fableon/Source/Assets.xcassets/image/皇冠2.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/皇冠2.imageset/皇冠2@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/皇冠2.imageset/皇冠2@3x.png create mode 100644 Fableon/Source/Assets.xcassets/image/皇冠3.imageset/Contents.json create mode 100644 Fableon/Source/Assets.xcassets/image/皇冠3.imageset/皇冠3@2x.png create mode 100644 Fableon/Source/Assets.xcassets/image/皇冠3.imageset/皇冠3@3x.png diff --git a/Fableon.xcodeproj/project.pbxproj b/Fableon.xcodeproj/project.pbxproj index 097e06a..2c0eab9 100644 --- a/Fableon.xcodeproj/project.pbxproj +++ b/Fableon.xcodeproj/project.pbxproj @@ -16,6 +16,23 @@ F342969A2EA0F8E700A58F99 /* FAGenresListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296992EA0F8E700A58F99 /* FAGenresListViewController.swift */; }; F342969F2EA0FA2200A58F99 /* FAGenresListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F342969E2EA0FA2200A58F99 /* FAGenresListCell.xib */; }; F34296A02EA0FA2200A58F99 /* FAGenresListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F342969D2EA0FA2200A58F99 /* FAGenresListCell.swift */; }; + F34296A82EA5D2C600A58F99 /* FACategoryModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296A72EA5D2C600A58F99 /* FACategoryModel.swift */; }; + F34296AA2EA5DF1600A58F99 /* FAPopularListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296A92EA5DF1600A58F99 /* FAPopularListViewController.swift */; }; + F34296AC2EA5E11A00A58F99 /* FANewListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296AB2EA5E11A00A58F99 /* FANewListViewController.swift */; }; + F34296AE2EA5E4CE00A58F99 /* FAPopularModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296AD2EA5E4CE00A58F99 /* FAPopularModel.swift */; }; + F34296B22EA604D400A58F99 /* FARankingListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296B12EA604D400A58F99 /* FARankingListViewController.swift */; }; + F34296B42EA605E800A58F99 /* FARankingListHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296B32EA605E800A58F99 /* FARankingListHeaderView.swift */; }; + F34296B62EA60C8E00A58F99 /* FAGradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296B52EA60C8E00A58F99 /* FAGradientView.swift */; }; + F34296B92EA61C9100A58F99 /* FARankingListCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F34296B82EA61C9100A58F99 /* FARankingListCell.xib */; }; + F34296BA2EA61C9100A58F99 /* FARankingListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296B72EA61C9100A58F99 /* FARankingListCell.swift */; }; + F34296BC2EA62C1A00A58F99 /* FAVideoLockView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296BB2EA62C1A00A58F99 /* FAVideoLockView.swift */; }; + F34296BE2EA765CA00A58F99 /* FAGradientButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296BD2EA765CA00A58F99 /* FAGradientButton.swift */; }; + F34296C02EA7742900A58F99 /* FAVideoUnlockResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296BF2EA7742900A58F99 /* FAVideoUnlockResult.swift */; }; + F34296D52EA8B70100A58F99 /* FAMeCoinsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296D42EA8B70100A58F99 /* FAMeCoinsView.swift */; }; + F34296D92EA8BD0B00A58F99 /* FAMeTableViewHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296D82EA8BD0B00A58F99 /* FAMeTableViewHeaderView.swift */; }; + F34296DB2EA8CA2B00A58F99 /* Date+FAAdd.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296DA2EA8CA2400A58F99 /* Date+FAAdd.swift */; }; + F34296DF2EA8D04800A58F99 /* FAStoreViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296DE2EA8D04800A58F99 /* FAStoreViewController.swift */; }; + F34296E12EA8D85D00A58F99 /* FABaseWebViewController+Script.swift in Sources */ = {isa = PBXBuildFile; fileRef = F34296E02EA8D85400A58F99 /* FABaseWebViewController+Script.swift */; }; F37103312E978F8C00E7F171 /* FACollectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37103302E978F8C00E7F171 /* FACollectViewController.swift */; }; F37103352E97929F00E7F171 /* FACollectCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F37103342E97929F00E7F171 /* FACollectCell.xib */; }; F37103362E97929F00E7F171 /* FACollectCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F37103332E97929F00E7F171 /* FACollectCell.swift */; }; @@ -127,6 +144,23 @@ F3DCC08B2E8BB16F00D58007 /* FARecommendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3DCC08A2E8BB16F00D58007 /* FARecommendViewController.swift */; }; F3DCC08E2E8BB1F100D58007 /* FARecommendViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3DCC08D2E8BB1F100D58007 /* FARecommendViewModel.swift */; }; F3DCC0912E8BBB7600D58007 /* FARecommendPlayerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3DCC0902E8BBB7600D58007 /* FARecommendPlayerCell.swift */; }; + F3EE96562EA8DFBD00A9306D /* FAWebMessageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE96552EA8DFBD00A9306D /* FAWebMessageModel.swift */; }; + F3EE96582EA8E1A000A9306D /* FAWalletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE96572EA8E1A000A9306D /* FAWalletViewController.swift */; }; + F3EE96602EA8E39200A9306D /* FAWalletCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE965E2EA8E39200A9306D /* FAWalletCell.swift */; }; + F3EE96612EA8E39200A9306D /* FAWalletCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F3EE965F2EA8E39200A9306D /* FAWalletCell.xib */; }; + F3EE96632EA8E61200A9306D /* FAWalletHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE96622EA8E61200A9306D /* FAWalletHeaderView.swift */; }; + F3EE96652EA9C63D00A9306D /* FAConsumptionRecordsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE96642EA9C63D00A9306D /* FAConsumptionRecordsViewController.swift */; }; + F3EE966A2EA9C72600A9306D /* FAConsumptionRecordsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE96682EA9C72600A9306D /* FAConsumptionRecordsCell.swift */; }; + F3EE966B2EA9C72600A9306D /* FAConsumptionRecordsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F3EE96692EA9C72600A9306D /* FAConsumptionRecordsCell.xib */; }; + F3EE966D2EA9D29600A9306D /* FAOrderRecordsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE966C2EA9D29600A9306D /* FAOrderRecordsViewController.swift */; }; + F3EE966F2EA9F94E00A9306D /* FACoinRecordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE966E2EA9F94E00A9306D /* FACoinRecordViewController.swift */; }; + F3EE96712EA9F96E00A9306D /* FAVipRecordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE96702EA9F96D00A9306D /* FAVipRecordViewController.swift */; }; + F3EE96742EA9FA5D00A9306D /* FAOrderRecordCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F3EE96732EA9FA5C00A9306D /* FAOrderRecordCell.xib */; }; + F3EE96752EA9FA5D00A9306D /* FAOrderRecordCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE96722EA9FA5C00A9306D /* FAOrderRecordCell.swift */; }; + F3EE96772EA9FD5F00A9306D /* FARewardCoinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE96762EA9FD5F00A9306D /* FARewardCoinsViewController.swift */; }; + F3EE967A2EA9FE0800A9306D /* FARewardCoinsCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = F3EE96792EA9FE0800A9306D /* FARewardCoinsCell.xib */; }; + F3EE967B2EA9FE0800A9306D /* FARewardCoinsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE96782EA9FE0800A9306D /* FARewardCoinsCell.swift */; }; + F3EE967D2EAA07F200A9306D /* FAMeListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3EE967C2EAA07F200A9306D /* FAMeListViewController.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -141,6 +175,23 @@ F34296992EA0F8E700A58F99 /* FAGenresListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAGenresListViewController.swift; sourceTree = ""; }; F342969D2EA0FA2200A58F99 /* FAGenresListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAGenresListCell.swift; sourceTree = ""; }; F342969E2EA0FA2200A58F99 /* FAGenresListCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FAGenresListCell.xib; sourceTree = ""; }; + F34296A72EA5D2C600A58F99 /* FACategoryModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FACategoryModel.swift; sourceTree = ""; }; + F34296A92EA5DF1600A58F99 /* FAPopularListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAPopularListViewController.swift; sourceTree = ""; }; + F34296AB2EA5E11A00A58F99 /* FANewListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FANewListViewController.swift; sourceTree = ""; }; + F34296AD2EA5E4CE00A58F99 /* FAPopularModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAPopularModel.swift; sourceTree = ""; }; + F34296B12EA604D400A58F99 /* FARankingListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FARankingListViewController.swift; sourceTree = ""; }; + F34296B32EA605E800A58F99 /* FARankingListHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FARankingListHeaderView.swift; sourceTree = ""; }; + F34296B52EA60C8E00A58F99 /* FAGradientView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAGradientView.swift; sourceTree = ""; }; + F34296B72EA61C9100A58F99 /* FARankingListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FARankingListCell.swift; sourceTree = ""; }; + F34296B82EA61C9100A58F99 /* FARankingListCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FARankingListCell.xib; sourceTree = ""; }; + F34296BB2EA62C1A00A58F99 /* FAVideoLockView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAVideoLockView.swift; sourceTree = ""; }; + F34296BD2EA765CA00A58F99 /* FAGradientButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAGradientButton.swift; sourceTree = ""; }; + F34296BF2EA7742900A58F99 /* FAVideoUnlockResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAVideoUnlockResult.swift; sourceTree = ""; }; + F34296D42EA8B70100A58F99 /* FAMeCoinsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAMeCoinsView.swift; sourceTree = ""; }; + F34296D82EA8BD0B00A58F99 /* FAMeTableViewHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAMeTableViewHeaderView.swift; sourceTree = ""; }; + F34296DA2EA8CA2400A58F99 /* Date+FAAdd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+FAAdd.swift"; sourceTree = ""; }; + F34296DE2EA8D04800A58F99 /* FAStoreViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAStoreViewController.swift; sourceTree = ""; }; + F34296E02EA8D85400A58F99 /* FABaseWebViewController+Script.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FABaseWebViewController+Script.swift"; sourceTree = ""; }; F37103302E978F8C00E7F171 /* FACollectViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FACollectViewController.swift; sourceTree = ""; }; F37103332E97929F00E7F171 /* FACollectCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FACollectCell.swift; sourceTree = ""; }; F37103342E97929F00E7F171 /* FACollectCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FACollectCell.xib; sourceTree = ""; }; @@ -255,6 +306,23 @@ F3DCC08A2E8BB16F00D58007 /* FARecommendViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FARecommendViewController.swift; sourceTree = ""; }; F3DCC08D2E8BB1F100D58007 /* FARecommendViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FARecommendViewModel.swift; sourceTree = ""; }; F3DCC0902E8BBB7600D58007 /* FARecommendPlayerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FARecommendPlayerCell.swift; sourceTree = ""; }; + F3EE96552EA8DFBD00A9306D /* FAWebMessageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAWebMessageModel.swift; sourceTree = ""; }; + F3EE96572EA8E1A000A9306D /* FAWalletViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAWalletViewController.swift; sourceTree = ""; }; + F3EE965E2EA8E39200A9306D /* FAWalletCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAWalletCell.swift; sourceTree = ""; }; + F3EE965F2EA8E39200A9306D /* FAWalletCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FAWalletCell.xib; sourceTree = ""; }; + F3EE96622EA8E61200A9306D /* FAWalletHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAWalletHeaderView.swift; sourceTree = ""; }; + F3EE96642EA9C63D00A9306D /* FAConsumptionRecordsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAConsumptionRecordsViewController.swift; sourceTree = ""; }; + F3EE96682EA9C72600A9306D /* FAConsumptionRecordsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAConsumptionRecordsCell.swift; sourceTree = ""; }; + F3EE96692EA9C72600A9306D /* FAConsumptionRecordsCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FAConsumptionRecordsCell.xib; sourceTree = ""; }; + F3EE966C2EA9D29600A9306D /* FAOrderRecordsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAOrderRecordsViewController.swift; sourceTree = ""; }; + F3EE966E2EA9F94E00A9306D /* FACoinRecordViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FACoinRecordViewController.swift; sourceTree = ""; }; + F3EE96702EA9F96D00A9306D /* FAVipRecordViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAVipRecordViewController.swift; sourceTree = ""; }; + F3EE96722EA9FA5C00A9306D /* FAOrderRecordCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAOrderRecordCell.swift; sourceTree = ""; }; + F3EE96732EA9FA5C00A9306D /* FAOrderRecordCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FAOrderRecordCell.xib; sourceTree = ""; }; + F3EE96762EA9FD5F00A9306D /* FARewardCoinsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FARewardCoinsViewController.swift; sourceTree = ""; }; + F3EE96782EA9FE0800A9306D /* FARewardCoinsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FARewardCoinsCell.swift; sourceTree = ""; }; + F3EE96792EA9FE0800A9306D /* FARewardCoinsCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FARewardCoinsCell.xib; sourceTree = ""; }; + F3EE967C2EAA07F200A9306D /* FAMeListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAMeListViewController.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -286,6 +354,29 @@ path = Pods; sourceTree = ""; }; + F34296DC2EA8D02500A58F99 /* Store */ = { + isa = PBXGroup; + children = ( + F34296DD2EA8D03200A58F99 /* C */, + F3EE965D2EA8E35A00A9306D /* V */, + ); + path = Store; + sourceTree = ""; + }; + F34296DD2EA8D03200A58F99 /* C */ = { + isa = PBXGroup; + children = ( + F34296DE2EA8D04800A58F99 /* FAStoreViewController.swift */, + F3EE96572EA8E1A000A9306D /* FAWalletViewController.swift */, + F3EE96642EA9C63D00A9306D /* FAConsumptionRecordsViewController.swift */, + F3EE966C2EA9D29600A9306D /* FAOrderRecordsViewController.swift */, + F3EE966E2EA9F94E00A9306D /* FACoinRecordViewController.swift */, + F3EE96702EA9F96D00A9306D /* FAVipRecordViewController.swift */, + F3EE96762EA9FD5F00A9306D /* FARewardCoinsViewController.swift */, + ); + path = C; + sourceTree = ""; + }; F371032E2E978F4D00E7F171 /* MyShort */ = { isa = PBXGroup; children = ( @@ -337,6 +428,8 @@ F371037D2EA082C700E7F171 /* FAWebView.swift */, F371037F2EA0839500E7F171 /* FABaseWebViewController.swift */, F37103812EA0868100E7F171 /* FAAppWebViewController.swift */, + F34296E02EA8D85400A58F99 /* FABaseWebViewController+Script.swift */, + F3EE96552EA8DFBD00A9306D /* FAWebMessageModel.swift */, ); path = WebView; sourceTree = ""; @@ -428,6 +521,7 @@ F37103482E9DD97200E7F171 /* UIScrollView+FARefresh.swift */, F371036A2E9E52FE00E7F171 /* UIStackView+FAAdd.swift */, F37103832EA0873400E7F171 /* Dictionary+FAAdd.swift */, + F34296DA2EA8CA2400A58F99 /* Date+FAAdd.swift */, ); path = Extension; sourceTree = ""; @@ -456,6 +550,7 @@ F3A792C92E77F70C0097E0BC /* FAShortDetailModel.swift */, F3A792CA2E77F70C0097E0BC /* FAShortPlayModel.swift */, F3A792CB2E77F70C0097E0BC /* FAVideoInfoModel.swift */, + F34296BF2EA7742900A58F99 /* FAVideoUnlockResult.swift */, ); path = M; sourceTree = ""; @@ -478,6 +573,7 @@ F3DCC0462E8A65B000D58007 /* FAEpSelectorCell.swift */, F3DCC0472E8A65B000D58007 /* FAEpSelectorCell.xib */, F3DCC04A2E8A6EAE00D58007 /* FAEpMenuView.swift */, + F34296BB2EA62C1A00A58F99 /* FAVideoLockView.swift */, ); path = V; sourceTree = ""; @@ -544,6 +640,8 @@ children = ( F3A792E72E77F8580097E0BC /* FAHomeModuleItem.swift */, F3A793112E78F8970097E0BC /* FAHomeItem.swift */, + F34296A72EA5D2C600A58F99 /* FACategoryModel.swift */, + F34296AD2EA5E4CE00A58F99 /* FAPopularModel.swift */, ); path = M; sourceTree = ""; @@ -575,6 +673,9 @@ F34296962EA0EAAA00A58F99 /* FAGenresCell.xib */, F342969D2EA0FA2200A58F99 /* FAGenresListCell.swift */, F342969E2EA0FA2200A58F99 /* FAGenresListCell.xib */, + F34296B32EA605E800A58F99 /* FARankingListHeaderView.swift */, + F34296B72EA61C9100A58F99 /* FARankingListCell.swift */, + F34296B82EA61C9100A58F99 /* FARankingListCell.xib */, ); path = V; sourceTree = ""; @@ -586,6 +687,9 @@ F371034C2E9DF9FB00E7F171 /* FASearchViewController.swift */, F34296932EA0E8CB00A58F99 /* FAGenresViewController.swift */, F34296992EA0F8E700A58F99 /* FAGenresListViewController.swift */, + F34296A92EA5DF1600A58F99 /* FAPopularListViewController.swift */, + F34296AB2EA5E11A00A58F99 /* FANewListViewController.swift */, + F34296B12EA604D400A58F99 /* FARankingListViewController.swift */, ); path = C; sourceTree = ""; @@ -636,6 +740,8 @@ F3A793172E790D440097E0BC /* FAImageView.swift */, F3A798BD2E82ACD10097E0BC /* FAPanModalContentView.swift */, F3DCC04C2E8A6F0D00D58007 /* FAScrollView.swift */, + F34296B52EA60C8E00A58F99 /* FAGradientView.swift */, + F34296BD2EA765CA00A58F99 /* FAGradientButton.swift */, ); path = View; sourceTree = ""; @@ -670,6 +776,7 @@ F3C9AE582E77DD8C00E25109 /* Class */ = { isa = PBXGroup; children = ( + F34296DC2EA8D02500A58F99 /* Store */, F3A792E02E77F8040097E0BC /* Home */, F3DCC0532E8A8EB200D58007 /* Me */, F3A792D52E77F70C0097E0BC /* Player */, @@ -721,6 +828,7 @@ isa = PBXGroup; children = ( F3DCC0562E8A8EE800D58007 /* FAMeViewController.swift */, + F3EE967C2EAA07F200A9306D /* FAMeListViewController.swift */, F37103722E9F9E0D00E7F171 /* FAAboutViewController.swift */, F371037A2EA0820C00E7F171 /* FASettingViewController.swift */, F37103852EA087FB00E7F171 /* FAFeedbackViewController.swift */, @@ -732,6 +840,8 @@ isa = PBXGroup; children = ( F3DCC0592E8A931900D58007 /* FAMeHeaderView.swift */, + F34296D42EA8B70100A58F99 /* FAMeCoinsView.swift */, + F34296D82EA8BD0B00A58F99 /* FAMeTableViewHeaderView.swift */, F3DCC0612E8A9E7600D58007 /* FAMeCell.swift */, F3DCC0622E8A9E7600D58007 /* FAMeCell.xib */, F37103742E9FA15B00E7F171 /* FAAboutCell.swift */, @@ -784,6 +894,22 @@ path = V; sourceTree = ""; }; + F3EE965D2EA8E35A00A9306D /* V */ = { + isa = PBXGroup; + children = ( + F3EE965E2EA8E39200A9306D /* FAWalletCell.swift */, + F3EE965F2EA8E39200A9306D /* FAWalletCell.xib */, + F3EE96622EA8E61200A9306D /* FAWalletHeaderView.swift */, + F3EE96682EA9C72600A9306D /* FAConsumptionRecordsCell.swift */, + F3EE96692EA9C72600A9306D /* FAConsumptionRecordsCell.xib */, + F3EE96722EA9FA5C00A9306D /* FAOrderRecordCell.swift */, + F3EE96732EA9FA5C00A9306D /* FAOrderRecordCell.xib */, + F3EE96782EA9FE0800A9306D /* FARewardCoinsCell.swift */, + F3EE96792EA9FE0800A9306D /* FARewardCoinsCell.xib */, + ); + path = V; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -847,19 +973,24 @@ buildActionMask = 2147483647; files = ( F34296982EA0EAAA00A58F99 /* FAGenresCell.xib in Resources */, + F3EE966B2EA9C72600A9306D /* FAConsumptionRecordsCell.xib in Resources */, F3A798B72E828C180097E0BC /* Localizable.strings in Resources */, F37103572E9E1FA500E7F171 /* FASearchRecordCell.xib in Resources */, + F34296B92EA61C9100A58F99 /* FARankingListCell.xib in Resources */, F342969F2EA0FA2200A58F99 /* FAGenresListCell.xib in Resources */, F39E663A2E77BAD0008AAAFA /* Assets.xcassets in Resources */, + F3EE96612EA8E39200A9306D /* FAWalletCell.xib in Resources */, F37103772E9FA15B00E7F171 /* FAAboutCell.xib in Resources */, F371035E2E9E2E7400E7F171 /* FASearchRecommendCell.xib in Resources */, F37103462E9CF9EE00E7F171 /* FAHistoryCell.xib in Resources */, F3A793292E795B4C0097E0BC /* FAHomeSectionTitleView.xib in Resources */, F3A793232E7944FF0097E0BC /* FAHomeRecommendedCell.xib in Resources */, F37103662E9E3ABC00E7F171 /* FASearchResultCell.xib in Resources */, + F3EE967A2EA9FE0800A9306D /* FARewardCoinsCell.xib in Resources */, F3DCC0482E8A65B000D58007 /* FAEpSelectorCell.xib in Resources */, F39E663C2E77BAD0008AAAFA /* LaunchScreen.storyboard in Resources */, F3DCC0642E8A9E7600D58007 /* FAMeCell.xib in Resources */, + F3EE96742EA9FA5D00A9306D /* FAOrderRecordCell.xib in Resources */, F37103352E97929F00E7F171 /* FACollectCell.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -924,13 +1055,20 @@ F38C25FD2E86A290008C22C3 /* FADefine.swift in Sources */, F3A793182E790D440097E0BC /* FAImageView.swift in Sources */, F3DCC05A2E8A931900D58007 /* FAMeHeaderView.swift in Sources */, + F34296AC2EA5E11A00A58F99 /* FANewListViewController.swift in Sources */, F3A792B62E77E0CC0097E0BC /* FANetworkManager.swift in Sources */, + F3EE966A2EA9C72600A9306D /* FAConsumptionRecordsCell.swift in Sources */, F3A792C62E77E93E0097E0BC /* FANavigationController.swift in Sources */, + F3EE966D2EA9D29600A9306D /* FAOrderRecordsViewController.swift in Sources */, + F34296BE2EA765CA00A58F99 /* FAGradientButton.swift in Sources */, + F34296A82EA5D2C600A58F99 /* FACategoryModel.swift in Sources */, F37103692E9E44A000E7F171 /* FASearchViewModel.swift in Sources */, F3A793122E78F8970097E0BC /* FAHomeItem.swift in Sources */, F3A798BE2E82ACD10097E0BC /* FAPanModalContentView.swift in Sources */, F3A792F22E77F8A80097E0BC /* FAHomeMustSeeView.swift in Sources */, F3A793242E7944FF0097E0BC /* FAHomeRecommendedCell.swift in Sources */, + F34296B22EA604D400A58F99 /* FARankingListViewController.swift in Sources */, + F34296B42EA605E800A58F99 /* FARankingListHeaderView.swift in Sources */, F3A792F42E77F8A80097E0BC /* FAHomeMustSeeContentView.swift in Sources */, F3DCC05E2E8A9C5800D58007 /* FATableViewCell.swift in Sources */, F371037E2EA082CD00E7F171 /* FAWebView.swift in Sources */, @@ -938,16 +1076,19 @@ F37103612E9E379E00E7F171 /* FASearchResultView.swift in Sources */, F3A792F52E77F8A80097E0BC /* FAHomeRecommendedItemView.swift in Sources */, F34296972EA0EAAA00A58F99 /* FAGenresCell.swift in Sources */, + F34296D92EA8BD0B00A58F99 /* FAMeTableViewHeaderView.swift in Sources */, F37103842EA0873B00E7F171 /* Dictionary+FAAdd.swift in Sources */, F3A792F72E77F8A80097E0BC /* FAHomeNewView.swift in Sources */, F3A792F82E77F8A80097E0BC /* FAHomeMustSeeShortView.swift in Sources */, F3A793042E77FB110097E0BC /* FAHomeViewController.swift in Sources */, + F34296DF2EA8D04800A58F99 /* FAStoreViewController.swift in Sources */, F371034F2E9DFB2000E7F171 /* FASearchInputView.swift in Sources */, F37103562E9E1FA500E7F171 /* FASearchRecordCell.swift in Sources */, F37103792E9FA91C00E7F171 /* FAAboutHeaderView.swift in Sources */, F3A792B12E77DFEE0097E0BC /* FALogin.swift in Sources */, F3DCC0502E8A861300D58007 /* FAHUD.swift in Sources */, F3DCC04D2E8A6F0D00D58007 /* FAScrollView.swift in Sources */, + F3EE967D2EAA07F200A9306D /* FAMeListViewController.swift in Sources */, F3DCC0572E8A8EE800D58007 /* FAMeViewController.swift in Sources */, F3A792E82E77F8590097E0BC /* FAHomeModuleItem.swift in Sources */, F3DCC0452E89530200D58007 /* CGMutablePath+FARoundedCorner.swift in Sources */, @@ -962,12 +1103,14 @@ F3C9AE5B2E77DDE100E25109 /* FAKeychainHelper.swift in Sources */, F371034D2E9DF9FB00E7F171 /* FASearchViewController.swift in Sources */, F3A792B82E77E0EF0097E0BC /* FACryptorService.swift in Sources */, + F3EE967B2EA9FE0800A9306D /* FARewardCoinsCell.swift in Sources */, F3A7932C2E796EF80097E0BC /* FAPlayerDetailControlView.swift in Sources */, F3A798BC2E82AB6F0097E0BC /* FAEpSelectorView.swift in Sources */, F37103512E9E1D7800E7F171 /* FASearchHomeView.swift in Sources */, F34296942EA0E8CB00A58F99 /* FAGenresViewController.swift in Sources */, F3A792AF2E77DFB90097E0BC /* FATokenModel.swift in Sources */, F38C25FA2E86A217008C22C3 /* UIView+FAAdd.swift in Sources */, + F3EE96652EA9C63D00A9306D /* FAConsumptionRecordsViewController.swift in Sources */, F342969A2EA0F8E700A58F99 /* FAGenresListViewController.swift in Sources */, F3A7931A2E7911420097E0BC /* FAPagerViewTransformer.swift in Sources */, F3DCC0672E8AA14A00D58007 /* FAMeItemModel.swift in Sources */, @@ -978,26 +1121,38 @@ F37103762E9FA15B00E7F171 /* FAAboutCell.swift in Sources */, F37103412E97C20C00E7F171 /* UINavigationBar+FAAdd.swift in Sources */, F3A792D82E77F70C0097E0BC /* FAShortDetailViewModel.swift in Sources */, + F3EE96562EA8DFBD00A9306D /* FAWebMessageModel.swift in Sources */, F37103802EA0839500E7F171 /* FABaseWebViewController.swift in Sources */, F3A793002E77FA0C0097E0BC /* SwiftUIExtension.swift in Sources */, F3A792D92E77F70C0097E0BC /* FAShortDetailModel.swift in Sources */, + F34296C02EA7742900A58F99 /* FAVideoUnlockResult.swift in Sources */, F3A792DA2E77F70C0097E0BC /* FAPlayerDetailCell.swift in Sources */, F3A792DB2E77F70C0097E0BC /* FAVideoInfoModel.swift in Sources */, F3A7930C2E7813FE0097E0BC /* FACollectionView.swift in Sources */, F37103822EA0868100E7F171 /* FAAppWebViewController.swift in Sources */, F37103712E9F964000E7F171 /* FALocalized.swift in Sources */, + F34296DB2EA8CA2B00A58F99 /* Date+FAAdd.swift in Sources */, + F3EE966F2EA9F94E00A9306D /* FACoinRecordViewController.swift in Sources */, + F3EE96632EA8E61200A9306D /* FAWalletHeaderView.swift in Sources */, + F34296E12EA8D85D00A58F99 /* FABaseWebViewController+Script.swift in Sources */, F3A792DC2E77F70C0097E0BC /* FAPlayerDetailViewController.swift in Sources */, F38C25FF2E86B663008C22C3 /* AppDelegate+FAConfig.swift in Sources */, F37103592E9E281C00E7F171 /* FASearchRecommendView.swift in Sources */, + F34296D52EA8B70100A58F99 /* FAMeCoinsView.swift in Sources */, F34296A02EA0FA2200A58F99 /* FAGenresListCell.swift in Sources */, F3A792BF2E77E4B80097E0BC /* FATool.swift in Sources */, F371033F2E97BDF800E7F171 /* FAHistoryViewController.swift in Sources */, + F3EE96752EA9FA5D00A9306D /* FAOrderRecordCell.swift in Sources */, + F34296BA2EA61C9100A58F99 /* FARankingListCell.swift in Sources */, F3DCC08B2E8BB16F00D58007 /* FARecommendViewController.swift in Sources */, F3DCC0492E8A65B000D58007 /* FAEpSelectorCell.swift in Sources */, F3A793162E790CC90097E0BC /* FAHomeBannerCell.swift in Sources */, + F3EE96602EA8E39200A9306D /* FAWalletCell.swift in Sources */, + F3EE96772EA9FD5F00A9306D /* FARewardCoinsViewController.swift in Sources */, F3DCC04B2E8A6EAE00D58007 /* FAEpMenuView.swift in Sources */, F3DCC0632E8A9E7600D58007 /* FAMeCell.swift in Sources */, F3A793142E78FC4C0097E0BC /* FAHomeBannerContentCell.swift in Sources */, + F3EE96712EA9F96E00A9306D /* FAVipRecordViewController.swift in Sources */, F39E66372E77BAD0008AAAFA /* AppDelegate.swift in Sources */, F3DCC08E2E8BB1F100D58007 /* FARecommendViewModel.swift in Sources */, F371036B2E9E530400E7F171 /* UIStackView+FAAdd.swift in Sources */, @@ -1005,13 +1160,16 @@ F3A792BC2E77E2EE0097E0BC /* String+FAAdd.swift in Sources */, F3A792AD2E77DF830097E0BC /* FAUserInfo.swift in Sources */, F3A792DF2E77F7EA0097E0BC /* FAAPI.swift in Sources */, + F34296AA2EA5DF1600A58F99 /* FAPopularListViewController.swift in Sources */, F3A7932A2E795B4C0097E0BC /* FAHomeSectionTitleView.swift in Sources */, F3DCC05C2E8A9C1B00D58007 /* FATableView.swift in Sources */, F37103492E9DD98600E7F171 /* UIScrollView+FARefresh.swift in Sources */, F3A7931E2E793D000097E0BC /* FAHomeNewContentCell.swift in Sources */, + F34296BC2EA62C1A00A58F99 /* FAVideoLockView.swift in Sources */, F39E66382E77BAD0008AAAFA /* SceneDelegate.swift in Sources */, F371036E2E9E6E7800E7F171 /* FAEmpty.swift in Sources */, F37103362E97929F00E7F171 /* FACollectCell.swift in Sources */, + F3EE96582EA8E1A000A9306D /* FAWalletViewController.swift in Sources */, F3A793532E7BA54A0097E0BC /* FAPlayerEpUIButton.swift in Sources */, F3A792EA2E77F8820097E0BC /* FAHomeViewModel.swift in Sources */, F3A792C82E77EED10097E0BC /* Font+FAAdd.swift in Sources */, @@ -1020,6 +1178,8 @@ F3A798B92E828F5E0097E0BC /* FAPlayerProgressView.swift in Sources */, F371035F2E9E2E7400E7F171 /* FASearchRecommendCell.swift in Sources */, F3A793092E7812F60097E0BC /* FAWaterfallFlowLayout.swift in Sources */, + F34296AE2EA5E4CE00A58F99 /* FAPopularModel.swift in Sources */, + F34296B62EA60C8E00A58F99 /* FAGradientView.swift in Sources */, F37103732E9F9E0D00E7F171 /* FAAboutViewController.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1060,6 +1220,8 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Fableon/Source/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Fableon; + INFOPLIST_KEY_NSCameraUsageDescription = "The APP needs to access your album to provide screenshots for feedback."; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "The APP needs to access your album to provide screenshots for feedback."; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UIMainStoryboardFile = ""; @@ -1096,6 +1258,8 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Fableon/Source/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Fableon; + INFOPLIST_KEY_NSCameraUsageDescription = "The APP needs to access your album to provide screenshots for feedback."; + INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "The APP needs to access your album to provide screenshots for feedback."; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UIMainStoryboardFile = ""; diff --git a/Fableon/Base/Controller/FAViewController.swift b/Fableon/Base/Controller/FAViewController.swift index 144f65f..d1e5fb8 100644 --- a/Fableon/Base/Controller/FAViewController.swift +++ b/Fableon/Base/Controller/FAViewController.swift @@ -6,8 +6,9 @@ // import UIKit +import JXSegmentedView -class FAViewController: UIViewController { +class FAViewController: UIViewController, JXSegmentedListContainerViewListDelegate { lazy var bgView: UIView = { let view = UIImageView(image: UIImage(named: "背景")) @@ -45,8 +46,13 @@ class FAViewController: UIViewController { return .lightContent } + + func listView() -> UIView { + return self.view + } } + extension UIViewController { func configNavigationBack(_ imageName: String = "Frame 3011") { let image = UIImage(named: imageName) diff --git a/Fableon/Base/Extension/Date+FAAdd.swift b/Fableon/Base/Extension/Date+FAAdd.swift new file mode 100644 index 0000000..74d4c53 --- /dev/null +++ b/Fableon/Base/Extension/Date+FAAdd.swift @@ -0,0 +1,31 @@ +// +// Date+FAAdd.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/22. +// + +import Foundation + +extension Date { + + ///相差天数 + func fa_differenceDay(_ date: Date) -> Int { + let dateComponents = Calendar.current.dateComponents([.day], from: self, to: date) + return dateComponents.day ?? 0 + } + + func fa_formatString(_ dateFormat: String) -> String { + let formatter = DateFormatter() + formatter.dateFormat = dateFormat + return formatter.string(from: self) + } + + ///是否是今天 + var br_isToday: Bool { + get { + return Calendar.current.isDateInToday(self) + } + } + +} diff --git a/Fableon/Base/Extension/UIScreen+FAAdd.swift b/Fableon/Base/Extension/UIScreen+FAAdd.swift index 758882b..1aa7f3d 100644 --- a/Fableon/Base/Extension/UIScreen+FAAdd.swift +++ b/Fableon/Base/Extension/UIScreen+FAAdd.swift @@ -37,4 +37,13 @@ extension UIScreen { static var tabBarHeight: CGFloat { return safeBottom + 49 } + + ///屏幕宽比 + static var widthRatio: CGFloat { + return UIScreen.width / 375 + } + + static func getRatioWidth(size: CGFloat) -> CGFloat { + return self.widthRatio * size + } } diff --git a/Fableon/Base/Request/FAAPI/FAAPI.swift b/Fableon/Base/Request/FAAPI/FAAPI.swift index d5b34cf..3a301b5 100644 --- a/Fableon/Base/Request/FAAPI/FAAPI.swift +++ b/Fableon/Base/Request/FAAPI/FAAPI.swift @@ -168,6 +168,87 @@ struct FAAPI { completer?(response.data?.list) } } + + static func requestGenresData(completer: ((_ list: [FACategoryModel]?) -> Void)?) { + + let parameters = [ + "short_play_num" : 5, + ] + + FANetworkManager.manager.request(FABaseURL + "/categoryListAppendShortPlay", + method: .get, + parameters: parameters, + isToast: true) { (response: FANetworkManager.Response>) in + completer?(response.data?.list) + } + } + + static func requestCategoryVideoList(id: String, page: Int, completer: ((_ listModel: FANetworkManager.List?) -> Void)?) { + + let parameters: [String : Any] = [ + "category_id" : id, + "current_page" : page, + "page_size" : 20 + ] + + FANetworkManager.manager.request(FABaseURL + "/videoList", + method: .get, + parameters: parameters, + isToast: true) { (response: FANetworkManager.Response>) in + completer?(response.data) + } + } + + static func requestPopularVideoList( completer: ((_ list: [FAShortPlayModel]?) -> Void)?) { + + FANetworkManager.manager.request(FABaseURL + "/homeTop", + method: .post, + parameters: nil, + isToast: true) { (response: FANetworkManager.Response) in + completer?(response.data?.hotData) + } + } + + static func requestNewVideoList( completer: ((_ list: [FAShortPlayModel]?) -> Void)?) { + + FANetworkManager.manager.request(FABaseURL + "/newShortPlayNoPaginate", + method: .post, + parameters: nil, + isToast: true) { (response: FANetworkManager.Response>) in + completer?(response.data?.list) + } + } + + static func requestRankingVideoList( completer: ((_ list: [FAShortPlayModel]?) -> Void)?) { + + let parameters = [ + "type" : "most_trending" + ] + + FANetworkManager.manager.request(FABaseURL + "/homeRanking", + method: .post, + parameters: parameters, + isToast: true) { (response: FANetworkManager.Response>) in + completer?(response.data?.list) + } + } + + ///金币解锁视频 + static func requestCoinUnlockVideo(shortPlayId: String, videoId: String, completer: ((_ model: FAVideoUnlockResult?) -> Void)?) { + + let parameters = [ + "short_play_id" : shortPlayId, + "video_id" : videoId, + ] + + FANetworkManager.manager.request(FABaseURL + "/buy_video", + method: .post, + parameters: parameters, + isLoding: true, + isToast: true) { (response: FANetworkManager.Response) in + completer?(response.data) + } + } } diff --git a/Fableon/Base/View/FAGradientButton.swift b/Fableon/Base/View/FAGradientButton.swift new file mode 100644 index 0000000..f752a12 --- /dev/null +++ b/Fableon/Base/View/FAGradientButton.swift @@ -0,0 +1,44 @@ +// +// FAGradientButton.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/21. +// + +import UIKit + +class FAGradientButton: UIButton { + + override class var layerClass: AnyClass { + return CAGradientLayer.self + } + + var fa_gradientLayer: CAGradientLayer { + return self.layer as! CAGradientLayer + } + + var fa_colors: [CGColor]? { + didSet { + fa_gradientLayer.colors = fa_colors + } + } + + var fa_startPoint: CGPoint = .zero { + didSet { + fa_gradientLayer.startPoint = fa_startPoint + } + } + + var fa_endPoint: CGPoint = .zero { + didSet { + fa_gradientLayer.endPoint = fa_endPoint + } + } + + var fa_locations: [NSNumber] = [] { + didSet { + fa_gradientLayer.locations = fa_locations + } + } + +} diff --git a/Fableon/Base/View/FAGradientView.swift b/Fableon/Base/View/FAGradientView.swift new file mode 100644 index 0000000..f5c4c98 --- /dev/null +++ b/Fableon/Base/View/FAGradientView.swift @@ -0,0 +1,44 @@ +// +// FAGradientView.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/20. +// + +import UIKit + +class FAGradientView: UIView { + + override class var layerClass: AnyClass { + return CAGradientLayer.self + } + + var fa_gradientLayer: CAGradientLayer { + return self.layer as! CAGradientLayer + } + + var fa_colors: [CGColor]? { + didSet { + fa_gradientLayer.colors = fa_colors + } + } + + var fa_startPoint: CGPoint = .zero { + didSet { + fa_gradientLayer.startPoint = fa_startPoint + } + } + + var fa_endPoint: CGPoint = .zero { + didSet { + fa_gradientLayer.endPoint = fa_endPoint + } + } + + var fa_locations: [NSNumber] = [] { + didSet { + fa_gradientLayer.locations = fa_locations + } + } + +} diff --git a/Fableon/Base/View/FAScrollView.swift b/Fableon/Base/View/FAScrollView.swift index dc41a6e..4b206a1 100644 --- a/Fableon/Base/View/FAScrollView.swift +++ b/Fableon/Base/View/FAScrollView.swift @@ -7,7 +7,10 @@ import UIKit -class FAScrollView: UIScrollView { +class FAScrollView: UIScrollView, UIGestureRecognizerDelegate { + + ///允许同时识别滑动手势 + var allowSimultaneousRecognition = false override init(frame: CGRect) { super.init(frame: frame) @@ -17,5 +20,10 @@ class FAScrollView: UIScrollView { required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { + return allowSimultaneousRecognition + } } diff --git a/Fableon/Base/WebView/FAAppWebViewController.swift b/Fableon/Base/WebView/FAAppWebViewController.swift index 53698bb..c6c78f5 100644 --- a/Fableon/Base/WebView/FAAppWebViewController.swift +++ b/Fableon/Base/WebView/FAAppWebViewController.swift @@ -18,8 +18,16 @@ class FAAppWebViewController: FABaseWebViewController { override func viewDidLoad() { super.viewDidLoad() - - // Do any additional setup after loading the view. + self.autoTitle = false + + if webUrl == kFAFeedBackListWebUrl { + self.title = "Feedback History".localized + } else if webUrl == kFAFeedBackHomeWebUrl { + self.title = "Feedback".localized + } else if webUrl == kFAFeedBackDetailWebUrl { + self.title = "Feedback Details".localized + } + } override func fa_webViewDidFinishLoad(_ webView: FAWebView) { diff --git a/Fableon/Base/WebView/FABaseWebViewController+Script.swift b/Fableon/Base/WebView/FABaseWebViewController+Script.swift new file mode 100644 index 0000000..7ada9df --- /dev/null +++ b/Fableon/Base/WebView/FABaseWebViewController+Script.swift @@ -0,0 +1,104 @@ +// +// FABaseWebViewController+Script.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/22. +// + +import UIKit +import WebKit +import ZLPhotoBrowser +import SmartCodable + +///APP交互 +let kFAWebMessageAPP = "js2app" +///打开反馈列表 +let kFAWebMessageOpenFeedbackList = "openFeedbackList" +///打开反馈详情 +let kFAWebMessageOpenFeedbackDetail = "openFeedbackDetail" +///打开相册 +let kFAWebMessageOpenPhotoPicker = "openPhotoPicker" + +extension FABaseWebViewController { + + func fa_webViewUserContentController(didReceive message: WKScriptMessage) { + let name = message.name + let body = message.body + + switch name { + case kFAWebMessageOpenFeedbackList: + let vc = FAAppWebViewController() + vc.webUrl = kFAFeedBackListWebUrl + self.navigationController?.pushViewController(vc, animated: true) + + case kFAWebMessageOpenFeedbackDetail: + guard let body = body as? [String : Any] else { return } + guard let id = body["id"] as? Int else { return } + + let vc = FAAppWebViewController() + vc.id = "\(id)" + vc.webUrl = kFAFeedBackDetailWebUrl + self.navigationController?.pushViewController(vc, animated: true) + + case kFAWebMessageOpenPhotoPicker: + openPhotoPicker() + + case kFAWebMessageAPP: + guard let body = message.body as? [String : Any] else { return } + guard let model = FAWebMessageModel.deserialize(from: body) else { return } + let type = model.type + let data = model.data + + if type == "login" { +// VPLoginManager.manager.openLogin() + + } else if type == "open_notify" { +// openNotify() + + } else if type == "watch_video" { + let vc = FAPlayerDetailViewController() + vc.shortPlayId = data?.short_play_id + vc.activityId = data?.activity_id + self.navigationController?.pushViewController(vc, animated: true) + } else { + + guard let urlStr = data?.link else { return } + guard let url = URL(string: urlStr) else { return } + if UIApplication.shared.canOpenURL(url) { + UIApplication.shared.open(url) + } + } + + + default: + break + } + + } + + + ///打开相册 + private func openPhotoPicker() { + + ZLPhotoConfiguration.default().allowSelectOriginal = false + ZLPhotoConfiguration.default().maxSelectCount = 1 + ZLPhotoConfiguration.default().allowEditImage = false + ZLPhotoConfiguration.default().allowSelectVideo = false + ZLPhotoConfiguration.default().allowSelectGif = false + ZLPhotoConfiguration.default().allowTakePhotoInLibrary = false + + let picker = ZLPhotoPicker() + picker.selectImageBlock = { [weak self] (results, _) in + guard let self = self else { return } + guard let image = results.first?.image else { return } + guard let imageData = image.jpegData(compressionQuality: 0.8) else { return } + let imageDataStr = imageData.base64EncodedString(options: .endLineWithCarriageReturn) + + let js = "uploadConvertImage('\(imageDataStr)')" + self.webView.evaluateJavaScript(js) + } + + picker.showPhotoLibrary(sender: self) + } + +} diff --git a/Fableon/Base/WebView/FABaseWebViewController.swift b/Fableon/Base/WebView/FABaseWebViewController.swift index ec5a3b7..c55161e 100644 --- a/Fableon/Base/WebView/FABaseWebViewController.swift +++ b/Fableon/Base/WebView/FABaseWebViewController.swift @@ -107,6 +107,6 @@ extension FABaseWebViewController: FAWebViewDelegate { } func fa_userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { - + self.fa_webViewUserContentController(didReceive: message) } } diff --git a/Fableon/Base/WebView/FAWebMessageModel.swift b/Fableon/Base/WebView/FAWebMessageModel.swift new file mode 100644 index 0000000..0ef29e9 --- /dev/null +++ b/Fableon/Base/WebView/FAWebMessageModel.swift @@ -0,0 +1,24 @@ +// +// FAWebMessageModel.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/22. +// + +import UIKit +import SmartCodable + +struct FAWebMessageModel: SmartCodable { + var type: String? + + var data: FAWebMessageData? + +} + +struct FAWebMessageData: SmartCodable { + + var activity_id: String? + var short_play_id: String? + var link: String? + +} diff --git a/Fableon/Base/WebView/FAWebView.swift b/Fableon/Base/WebView/FAWebView.swift index b60acde..a1f78a7 100644 --- a/Fableon/Base/WebView/FAWebView.swift +++ b/Fableon/Base/WebView/FAWebView.swift @@ -34,6 +34,10 @@ class FAWebView: WKWebView { weak var delegate: FAWebViewDelegate? private(set) var scriptMessageHandlerArray: [String] = [ + kFAWebMessageAPP, + kFAWebMessageOpenFeedbackList, + kFAWebMessageOpenFeedbackDetail, + kFAWebMessageOpenPhotoPicker, ] diff --git a/Fableon/Class/Home/C/FAGenresListViewController.swift b/Fableon/Class/Home/C/FAGenresListViewController.swift index b8e9f1d..5a7624e 100644 --- a/Fableon/Class/Home/C/FAGenresListViewController.swift +++ b/Fableon/Class/Home/C/FAGenresListViewController.swift @@ -9,6 +9,10 @@ import UIKit class FAGenresListViewController: FAViewController { + var model: FACategoryModel? + + private var dataArr: [FAShortPlayModel] = [] + private var page = 1 private lazy var collectionViewLayout: UICollectionViewFlowLayout = { let width = floor((UIScreen.width - 32 - 16) / 3) @@ -28,13 +32,22 @@ class FAGenresListViewController: FAViewController { collectionView.dataSource = self collectionView.contentInset = .init(top: 20, left: 0, bottom: UIScreen.safeBottom + 10, right: 0) collectionView.register(UINib(nibName: "FAGenresListCell", bundle: nil), forCellWithReuseIdentifier: "cell") + collectionView.fa_addRefreshHeader(insetTop: collectionView.contentInset.top) { [weak self] in + self?.handleHeaderRefresh(nil) + } + collectionView.fa_addRefreshFooter(insetBottom: 0) { [weak self] in + self?.handleFooterRefresh(nil) + } return collectionView }() override func viewDidLoad() { super.viewDidLoad() + self.title = model?.category_name fa_setupLayout() + + requestDataArr(page: 1, completer: nil) } override func viewWillAppear(_ animated: Bool) { @@ -43,7 +56,17 @@ class FAGenresListViewController: FAViewController { fa_setNavigationStyle() } + override func handleHeaderRefresh(_ completer: (() -> Void)?) { + requestDataArr(page: 1) { [weak self] in + self?.collectionView.fa_endHeaderRefreshing() + } + } + override func handleFooterRefresh(_ completer: (() -> Void)?) { + requestDataArr(page: page + 1) { [weak self] in + self?.collectionView.fa_endFooterRefreshing() + } + } } @@ -64,11 +87,43 @@ extension FAGenresListViewController { extension FAGenresListViewController: UICollectionViewDelegate, UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return 10 + return dataArr.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! FAGenresListCell + cell.model = dataArr[indexPath.row] return cell } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let model = dataArr[indexPath.row] + let vc = FAPlayerDetailViewController() + vc.shortPlayId = model.short_play_id + self.navigationController?.pushViewController(vc, animated: true) + } +} + +extension FAGenresListViewController { + + private func requestDataArr(page: Int, completer: (() -> Void)?) { + guard let id = self.model?.id else { return } + + FAAPI.requestCategoryVideoList(id: id, page: page) { [weak self] listModel in + guard let self = self else { return } + if let list = listModel?.list { + if page == 1 { + self.dataArr.removeAll() + } + + self.dataArr += list + self.collectionView.reloadData() + + self.page = page + } + completer?() + self.collectionView.fa_updateNoMoreDataState(listModel?.hasNextPage) + } + } + } diff --git a/Fableon/Class/Home/C/FAGenresViewController.swift b/Fableon/Class/Home/C/FAGenresViewController.swift index 1c9e3fb..d86a836 100644 --- a/Fableon/Class/Home/C/FAGenresViewController.swift +++ b/Fableon/Class/Home/C/FAGenresViewController.swift @@ -18,6 +18,8 @@ class FAGenresViewController: FAViewController { .FCB_072_0_5 ] + private lazy var dataArr: [FACategoryModel] = [] + private lazy var collectionViewLayout: UICollectionViewFlowLayout = { let layout = UICollectionViewFlowLayout() layout.minimumLineSpacing = 10 @@ -39,6 +41,8 @@ class FAGenresViewController: FAViewController { self.title = "Genres".localized fa_setupLayout() + + requestDataArr() } override func viewWillAppear(_ animated: Bool) { @@ -68,16 +72,33 @@ extension FAGenresViewController: UICollectionViewDelegate, UICollectionViewData func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! FAGenresCell cell.bgView.backgroundColor = bgColorArr[indexPath.row % 5] + cell.model = self.dataArr[indexPath.row] return cell } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return 10 + return self.dataArr.count } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let vc = FAGenresListViewController() + vc.model = dataArr[indexPath.row] self.navigationController?.pushViewController(vc, animated: true) } } + +extension FAGenresViewController { + + private func requestDataArr() { + + FAAPI.requestGenresData { [weak self] list in + guard let self = self else { return } + guard let list = list else { return } + + self.dataArr = list + self.collectionView.reloadData() + } + } + +} diff --git a/Fableon/Class/Home/C/FANewListViewController.swift b/Fableon/Class/Home/C/FANewListViewController.swift new file mode 100644 index 0000000..128f1e2 --- /dev/null +++ b/Fableon/Class/Home/C/FANewListViewController.swift @@ -0,0 +1,119 @@ +// +// FANewListViewController.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/20. +// + +import UIKit + +class FANewListViewController: FAViewController { + + private var dataArr: [FAShortPlayModel] = [] +// private var page = 1 + + private lazy var collectionViewLayout: UICollectionViewFlowLayout = { + let width = floor((UIScreen.width - 32 - 16) / 3) + let height = 145 / 109 * width + 41 + + let layout = UICollectionViewFlowLayout() + layout.minimumLineSpacing = 12 + layout.minimumInteritemSpacing = 8 + layout.itemSize = .init(width: width, height: height) + layout.sectionInset = .init(top: 0, left: 16, bottom: 0, right: 16) + return layout + }() + + private lazy var collectionView: FACollectionView = { + let collectionView = FACollectionView(frame: .zero, collectionViewLayout: collectionViewLayout) + collectionView.delegate = self + collectionView.dataSource = self + collectionView.contentInset = .init(top: 20, left: 0, bottom: UIScreen.safeBottom + 10, right: 0) + collectionView.register(UINib(nibName: "FAGenresListCell", bundle: nil), forCellWithReuseIdentifier: "cell") + collectionView.fa_addRefreshHeader(insetTop: collectionView.contentInset.top) { [weak self] in + self?.handleHeaderRefresh(nil) + } +// collectionView.fa_addRefreshFooter(insetBottom: 0) { [weak self] in +// self?.handleFooterRefresh(nil) +// } + return collectionView + }() + + override func viewDidLoad() { + super.viewDidLoad() + self.title = "New".localized + + fa_setupLayout() + + requestDataArr(page: 1, completer: nil) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.setNavigationBarHidden(false, animated: true) + fa_setNavigationStyle() + } + + override func handleHeaderRefresh(_ completer: (() -> Void)?) { + requestDataArr(page: 1) { [weak self] in + self?.collectionView.fa_endHeaderRefreshing() + } + } + +// override func handleFooterRefresh(_ completer: (() -> Void)?) { +// requestDataArr(page: page + 1) { [weak self] in +// self?.collectionView.fa_endFooterRefreshing() +// } +// } +} + +extension FANewListViewController { + + private func fa_setupLayout() { + view.addSubview(collectionView) + + collectionView.snp.makeConstraints { make in + make.left.right.bottom.equalToSuperview() + make.top.equalToSuperview().offset(UIScreen.navBarHeight) + } + } + +} + +//MARK: UICollectionViewDelegate UICollectionViewDataSource +extension FANewListViewController: UICollectionViewDelegate, UICollectionViewDataSource { + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return dataArr.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! FAGenresListCell + cell.model = dataArr[indexPath.row] + return cell + } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let model = dataArr[indexPath.row] + let vc = FAPlayerDetailViewController() + vc.shortPlayId = model.short_play_id + self.navigationController?.pushViewController(vc, animated: true) + } +} + +extension FANewListViewController { + + private func requestDataArr(page: Int, completer: (() -> Void)?) { + + FAAPI.requestNewVideoList { [weak self] list in + guard let self = self else { return } + if let list = list { + self.dataArr = list + self.collectionView.reloadData() + + } + completer?() + } + } + +} diff --git a/Fableon/Class/Home/C/FAPopularListViewController.swift b/Fableon/Class/Home/C/FAPopularListViewController.swift new file mode 100644 index 0000000..6e08801 --- /dev/null +++ b/Fableon/Class/Home/C/FAPopularListViewController.swift @@ -0,0 +1,121 @@ +// +// FAPopularListViewController.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/20. +// + +import UIKit + +class FAPopularListViewController: FAViewController { + + private var dataArr: [FAShortPlayModel] = [] +// private var page = 1 + + private lazy var collectionViewLayout: UICollectionViewFlowLayout = { + let width = floor((UIScreen.width - 32 - 16) / 3) + let height = 145 / 109 * width + 41 + + let layout = UICollectionViewFlowLayout() + layout.minimumLineSpacing = 12 + layout.minimumInteritemSpacing = 8 + layout.itemSize = .init(width: width, height: height) + layout.sectionInset = .init(top: 0, left: 16, bottom: 0, right: 16) + return layout + }() + + private lazy var collectionView: FACollectionView = { + let collectionView = FACollectionView(frame: .zero, collectionViewLayout: collectionViewLayout) + collectionView.delegate = self + collectionView.dataSource = self + collectionView.contentInset = .init(top: 20, left: 0, bottom: UIScreen.safeBottom + 10, right: 0) + collectionView.register(UINib(nibName: "FAGenresListCell", bundle: nil), forCellWithReuseIdentifier: "cell") + collectionView.fa_addRefreshHeader(insetTop: collectionView.contentInset.top) { [weak self] in + self?.handleHeaderRefresh(nil) + } +// collectionView.fa_addRefreshFooter(insetBottom: 0) { [weak self] in +// self?.handleFooterRefresh(nil) +// } + return collectionView + }() + + override func viewDidLoad() { + super.viewDidLoad() + self.title = "Popular".localized + + fa_setupLayout() + + requestDataArr(page: 1, completer: nil) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.setNavigationBarHidden(false, animated: true) + fa_setNavigationStyle() + } + + override func handleHeaderRefresh(_ completer: (() -> Void)?) { + requestDataArr(page: 1) { [weak self] in + self?.collectionView.fa_endHeaderRefreshing() + } + } + +// override func handleFooterRefresh(_ completer: (() -> Void)?) { +// requestDataArr(page: page + 1) { [weak self] in +// self?.collectionView.fa_endFooterRefreshing() +// } +// } + +} + +extension FAPopularListViewController { + + private func fa_setupLayout() { + view.addSubview(collectionView) + + collectionView.snp.makeConstraints { make in + make.left.right.bottom.equalToSuperview() + make.top.equalToSuperview().offset(UIScreen.navBarHeight) + } + } + +} + +//MARK: UICollectionViewDelegate UICollectionViewDataSource +extension FAPopularListViewController: UICollectionViewDelegate, UICollectionViewDataSource { + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return dataArr.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! FAGenresListCell + cell.model = dataArr[indexPath.row] + return cell + } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let model = dataArr[indexPath.row] + let vc = FAPlayerDetailViewController() + vc.shortPlayId = model.short_play_id + self.navigationController?.pushViewController(vc, animated: true) + } +} + +extension FAPopularListViewController { + + private func requestDataArr(page: Int, completer: (() -> Void)?) { + + FAAPI.requestPopularVideoList { [weak self] list in + guard let self = self else { return } + if let list = list { + + self.dataArr = list + self.collectionView.reloadData() + } + completer?() + } + } + +} + diff --git a/Fableon/Class/Home/C/FARankingListViewController.swift b/Fableon/Class/Home/C/FARankingListViewController.swift new file mode 100644 index 0000000..e48f558 --- /dev/null +++ b/Fableon/Class/Home/C/FARankingListViewController.swift @@ -0,0 +1,128 @@ +// +// FARankingListViewController.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/20. +// + +import UIKit + +class FARankingListViewController: FAViewController { + + private lazy var dataArr: [FAShortPlayModel] = [] + + private lazy var headerView: FARankingListHeaderView = { + let view = FARankingListHeaderView() + return view + }() + + private lazy var contentView: UIView = { + let view = UIView() + view.fa_setRoundedCorner(topLeft: 27, topRight: 27, bottomLeft: 0, bottomRight: 0) + view.backgroundColor = ._5_CA_8_FF_0_2 + return view + }() + + private lazy var collectionViewLayout: UICollectionViewFlowLayout = { + let layout = UICollectionViewFlowLayout() + layout.itemSize = .init(width: UIScreen.width - 32, height: 70) + layout.minimumLineSpacing = 15 + return layout + }() + + private lazy var collectionView: FACollectionView = { + let collectionView = FACollectionView(frame: .zero, collectionViewLayout: collectionViewLayout) + collectionView.delegate = self + collectionView.dataSource = self + collectionView.showsVerticalScrollIndicator = false + collectionView.showsHorizontalScrollIndicator = false + collectionView.contentInset = .init(top: 15, left: 0, bottom: UIScreen.safeBottom + 10, right: 0) + collectionView.register(UINib(nibName: "FARankingListCell", bundle: nil), forCellWithReuseIdentifier: "cell") + return collectionView + }() + + override func viewDidLoad() { + super.viewDidLoad() + self.title = "Rankings".localized + + fa_setupLayout() + + requestDataArr(completer: nil) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.setNavigationBarHidden(false, animated: true) + fa_setNavigationStyle() + } + +} + +extension FARankingListViewController { + + private func fa_setupLayout() { + view.addSubview(headerView) + view.addSubview(contentView) + contentView.addSubview(collectionView) + + headerView.snp.makeConstraints { make in + make.left.right.equalToSuperview() + make.top.equalToSuperview().offset(UIScreen.navBarHeight) + } + + contentView.snp.makeConstraints { make in + make.left.equalToSuperview().offset(16) + make.centerX.equalToSuperview() + make.top.equalTo(headerView.snp.bottom) + make.bottom.equalToSuperview() + } + + collectionView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } + +} + +//MARK: UICollectionViewDelegate UICollectionViewDataSource +extension FARankingListViewController: UICollectionViewDelegate, UICollectionViewDataSource { + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! FARankingListCell + cell.model = dataArr[indexPath.row + 3] + cell.number = indexPath.row + 4 + return cell + } + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + let count = self.dataArr.count - 3 + if count < 0 { + return 0 + } + return count + } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + let model = dataArr[indexPath.row + 3] + let vc = FAPlayerDetailViewController() + vc.shortPlayId = model.short_play_id + self.navigationController?.pushViewController(vc, animated: true) + } +} + +extension FARankingListViewController { + + private func requestDataArr(completer: (() -> Void)?) { + + FAAPI.requestRankingVideoList { [weak self] list in + guard let self = self else { return } + if let list = list { + self.dataArr = list + self.headerView.dataArr = list + self.collectionView.reloadData() + + } + completer?() + } + } +} diff --git a/Fableon/Class/Home/M/FACategoryModel.swift b/Fableon/Class/Home/M/FACategoryModel.swift new file mode 100644 index 0000000..eaf67a3 --- /dev/null +++ b/Fableon/Class/Home/M/FACategoryModel.swift @@ -0,0 +1,16 @@ +// +// FACategoryModel.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/20. +// + +import UIKit +import SmartCodable + +struct FACategoryModel: SmartCodable { + + var id: String? + var category_name: String? + var short_play_list: [FAShortPlayModel]? +} diff --git a/Fableon/Class/Home/M/FAPopularModel.swift b/Fableon/Class/Home/M/FAPopularModel.swift new file mode 100644 index 0000000..ad62f9b --- /dev/null +++ b/Fableon/Class/Home/M/FAPopularModel.swift @@ -0,0 +1,15 @@ +// +// FAPopularModel.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/20. +// + +import UIKit +import SmartCodable + +struct FAPopularModel: SmartCodable { + + var hotData: [FAShortPlayModel]? + +} diff --git a/Fableon/Class/Home/UI/FAHomeMustSeeContentView.swift b/Fableon/Class/Home/UI/FAHomeMustSeeContentView.swift index 6b36348..59cee9d 100644 --- a/Fableon/Class/Home/UI/FAHomeMustSeeContentView.swift +++ b/Fableon/Class/Home/UI/FAHomeMustSeeContentView.swift @@ -25,12 +25,12 @@ struct FAHomeMustSeeContentView: View { .padding(.leading, 10) .padding(.top, 12) Spacer() -// Image("Frame 3013") -// .padding(.top, 14) -// .padding(.trailing, 10) -// .onTapGesture { -// self.viewModel.pushMustSee(moduleKey) -// } + Image("Frame 3013") + .padding(.top, 14) + .padding(.trailing, 10) + .onTapGesture { + self.viewModel.pushMustSee(moduleKey) + } } VStack(spacing: 11) { diff --git a/Fableon/Class/Home/UI/FAHomeMustSeeShortView.swift b/Fableon/Class/Home/UI/FAHomeMustSeeShortView.swift index d9fd114..627817d 100644 --- a/Fableon/Class/Home/UI/FAHomeMustSeeShortView.swift +++ b/Fableon/Class/Home/UI/FAHomeMustSeeShortView.swift @@ -31,9 +31,9 @@ struct FAHomeMustSeeShortView: View { KFImage(URL(string: model.image_url ?? "")) .resizable() .scaledToFill() + .frame(width: 76, height: 102) .cornerRadius(5) .clipped() - .frame(width: 76, height: 102) .padding(.leading, 9) VStack(alignment: .leading) { diff --git a/Fableon/Class/Home/V/FAGenresCell.swift b/Fableon/Class/Home/V/FAGenresCell.swift index bba7246..17c4368 100644 --- a/Fableon/Class/Home/V/FAGenresCell.swift +++ b/Fableon/Class/Home/V/FAGenresCell.swift @@ -9,6 +9,23 @@ import UIKit class FAGenresCell: UICollectionViewCell { + var model: FACategoryModel? { + didSet { + var list = model?.short_play_list + let firstModel = list?.removeFirst() + + hotCountLabel.text = "\(firstModel?.watch_total ?? 0)" + nameLabel.text = model?.category_name + coverImageView.fa_setImage(firstModel?.image_url) + + + list?.enumerated().forEach { + let i = $0 + let imageView = smallImageViewArr[i] + imageView.fa_setImage($1.image_url) + } + } + } @IBOutlet weak var bgView: UIView! @@ -18,7 +35,7 @@ class FAGenresCell: UICollectionViewCell { @IBOutlet weak var hotCountLabel: UILabel! - private lazy var smallImageViewArr: [UIView] = [] + private lazy var smallImageViewArr: [UIImageView] = [] override func awakeFromNib() { super.awakeFromNib() diff --git a/Fableon/Class/Home/V/FAGenresCell.xib b/Fableon/Class/Home/V/FAGenresCell.xib index 0601e39..8e5fa7e 100644 --- a/Fableon/Class/Home/V/FAGenresCell.xib +++ b/Fableon/Class/Home/V/FAGenresCell.xib @@ -45,6 +45,7 @@ + diff --git a/Fableon/Class/Home/V/FAGenresListCell.swift b/Fableon/Class/Home/V/FAGenresListCell.swift index 0910ac2..d7d4ed6 100644 --- a/Fableon/Class/Home/V/FAGenresListCell.swift +++ b/Fableon/Class/Home/V/FAGenresListCell.swift @@ -8,7 +8,18 @@ import UIKit class FAGenresListCell: UICollectionViewCell { - + + var model: FAShortPlayModel? { + didSet { + coverImageView.fa_setImage(model?.image_url) + nameLabel.text = model?.name + } + } + + @IBOutlet weak var coverImageView: FAImageView! + + @IBOutlet weak var nameLabel: UILabel! + override func awakeFromNib() { super.awakeFromNib() // Initialization code diff --git a/Fableon/Class/Home/V/FAGenresListCell.xib b/Fableon/Class/Home/V/FAGenresListCell.xib index 35b4127..1f0e95d 100644 --- a/Fableon/Class/Home/V/FAGenresListCell.xib +++ b/Fableon/Class/Home/V/FAGenresListCell.xib @@ -45,6 +45,10 @@ + + + + diff --git a/Fableon/Class/Home/V/FARankingListCell.swift b/Fableon/Class/Home/V/FARankingListCell.swift new file mode 100644 index 0000000..5843061 --- /dev/null +++ b/Fableon/Class/Home/V/FARankingListCell.swift @@ -0,0 +1,42 @@ +// +// FARankingListCell.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/20. +// + +import UIKit + +class FARankingListCell: UICollectionViewCell { + + var model: FAShortPlayModel? { + didSet { + coverImageView.fa_setImage(model?.image_url) + nameLabel.text = model?.name + epLabel.text = "Ep.##".localizedReplace(text: "\(model?.episode_total ?? 0)") + countLabel.text = "\(model?.watch_total ?? 0)" + } + } + + var number: Int = 0 { + didSet { + numberLabel.text = "\(number)" + } + } + + @IBOutlet weak var numberLabel: UILabel! + + @IBOutlet weak var coverImageView: FAImageView! + + @IBOutlet weak var nameLabel: UILabel! + + @IBOutlet weak var epLabel: UILabel! + + @IBOutlet weak var countLabel: UILabel! + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + +} diff --git a/Fableon/Class/Home/V/FARankingListCell.xib b/Fableon/Class/Home/V/FARankingListCell.xib new file mode 100644 index 0000000..041de41 --- /dev/null +++ b/Fableon/Class/Home/V/FARankingListCell.xib @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Fableon/Class/Home/V/FARankingListHeaderView.swift b/Fableon/Class/Home/V/FARankingListHeaderView.swift new file mode 100644 index 0000000..33e363e --- /dev/null +++ b/Fableon/Class/Home/V/FARankingListHeaderView.swift @@ -0,0 +1,212 @@ +// +// FARankingListHeaderView.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/20. +// + +import UIKit + +class FARankingListHeaderView: UIView { + + override var intrinsicContentSize: CGSize { + return .init(width: UIScreen.width, height: 150 + coverSize) + } + + var dataArr: [FAShortPlayModel] = [] { + didSet { + oneView.isHidden = true + twoView.isHidden = true + threeView.isHidden = true + if dataArr.count > 0 { + oneView.isHidden = false + oneView.model = dataArr[0] + } + if dataArr.count > 1 { + twoView.isHidden = false + twoView.model = dataArr[1] + } + if dataArr.count > 2 { + threeView.isHidden = false + threeView.model = dataArr[2] + } + } + } + + private lazy var margin = UIScreen.getRatioWidth(size: 43) + private lazy var spacing = 10.0 + private lazy var itemWidth = floor((UIScreen.width - margin * 2 - spacing * 2) / 3) + private lazy var coverSize = itemWidth - UIScreen.getRatioWidth(size: 36) + + + + private lazy var oneView: FARankingListHeaderItemView = { + let view = FARankingListHeaderItemView() + view.isHidden = true + view.coverSize = coverSize + view.numberImageView.image = UIImage(named: "皇冠1") + return view + }() + + private lazy var twoView: FARankingListHeaderItemView = { + let view = FARankingListHeaderItemView() + view.isHidden = true + view.coverSize = coverSize + view.numberImageView.image = UIImage(named: "皇冠2") + return view + }() + + private lazy var threeView: FARankingListHeaderItemView = { + let view = FARankingListHeaderItemView() + view.isHidden = true + view.coverSize = coverSize + view.numberImageView.image = UIImage(named: "皇冠3") + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + + + addSubview(oneView) + addSubview(twoView) + addSubview(threeView) + + oneView.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.width.equalTo(itemWidth) + make.top.equalToSuperview().offset(32) + make.bottom.equalToSuperview().offset(-10) + } + + twoView.snp.makeConstraints { make in + make.right.equalTo(oneView.snp.left).offset(-10) + make.top.equalTo(oneView).offset(25) + make.width.equalTo(oneView) + make.bottom.equalToSuperview().offset(-10) + } + + threeView.snp.makeConstraints { make in + make.left.equalTo(oneView.snp.right).offset(10) + make.top.equalTo(twoView).offset(5) + make.width.equalTo(oneView) + make.bottom.equalToSuperview().offset(-10) + } + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + + +class FARankingListHeaderItemView: UIView { + +// override var intrinsicContentSize: CGSize { +// return .init(width: 97, height: 140 + coverSize) +// } + + var model: FAShortPlayModel? { + didSet { + coverImageView.fa_setImage(model?.image_url) + nameLabel.text = model?.name + + } + } + + var coverSize: CGFloat = 60 { + didSet { + self.invalidateIntrinsicContentSize() + + coverImageView.snp.updateConstraints { make in + make.width.height.equalTo(coverSize) + } + + coverImageView.layer.cornerRadius = coverSize / 2 + + } + } + + private lazy var bgView: UIView = { + let view = FAGradientView() + view.fa_locations = [0, 1] + view.fa_colors = [UIColor._1680_FB.cgColor, UIColor._79_A_7_DB.withAlphaComponent(0).cgColor] + view.fa_startPoint = .init(x: 0.5, y: 0) + view.fa_endPoint = .init(x: 0.5, y: 1) + return view + }() + + private lazy var coverImageView: FAImageView = { + let imageView = FAImageView() + imageView.layer.borderWidth = 2 + imageView.layer.borderColor = UIColor.FFFFFF.cgColor + return imageView + }() + + private(set) lazy var numberImageView: UIImageView = { + let imageView = UIImageView() + return imageView + }() + + private lazy var nameLabel: UILabel = { + let label = UILabel() + label.textAlignment = .center + label.textColor = .FFFFFF + label.font = .font(ofSize: 14, weight: .bold) + label.numberOfLines = 2 + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + addSubview(bgView) + addSubview(coverImageView) + addSubview(numberImageView) + addSubview(nameLabel) + + bgView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + + coverImageView.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalToSuperview().offset(20) + make.width.height.equalTo(60) + } + + numberImageView.snp.makeConstraints { make in + make.left.equalToSuperview().offset(-5) + make.top.equalToSuperview().offset(-8) + } + + nameLabel.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.right.lessThanOrEqualToSuperview().offset(-9) + make.top.equalTo(coverImageView.snp.bottom).offset(10) + } + + + let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap)) + addGestureRecognizer(tap) + } + @objc private func handleTap() { + let vc = FAPlayerDetailViewController() + vc.shortPlayId = self.model?.short_play_id + self.viewController?.navigationController?.pushViewController(vc, animated: true) + } + + override func layoutSubviews() { + super.layoutSubviews() + + bgView.fa_setRoundedCorner(topLeft: self.width / 2, topRight: self.width / 2, bottomLeft: 0, bottomRight: 0) + + + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} diff --git a/Fableon/Class/Home/VM/FAHomeViewModel.swift b/Fableon/Class/Home/VM/FAHomeViewModel.swift index c60b19e..3641698 100644 --- a/Fableon/Class/Home/VM/FAHomeViewModel.swift +++ b/Fableon/Class/Home/VM/FAHomeViewModel.swift @@ -126,9 +126,27 @@ extension FAHomeViewModel { } func pushMustSee(_ key: FAHomeModuleItem.ModuleKey?) { - debugLog("\(key?.rawValue)") + var vc: FAViewController? - let vc = FAGenresViewController() - FATool.topViewController?.navigationController?.pushViewController(vc, animated: true) + switch key { + case .v3_recommand: + vc = FAPopularListViewController() + + case .cagetory_recommand: + vc = FAGenresViewController() + + case .new_recommand: + vc = FANewListViewController() + + case .week_ranking: + vc = FARankingListViewController() + + default: + break + } + + if let vc = vc { + FATool.topViewController?.navigationController?.pushViewController(vc, animated: true) + } } } diff --git a/Fableon/Class/Me/C/FAFeedbackViewController.swift b/Fableon/Class/Me/C/FAFeedbackViewController.swift index e6534f3..0589cd7 100644 --- a/Fableon/Class/Me/C/FAFeedbackViewController.swift +++ b/Fableon/Class/Me/C/FAFeedbackViewController.swift @@ -13,18 +13,17 @@ class FAFeedbackViewController: FAAppWebViewController { self.webUrl = kFAFeedBackHomeWebUrl super.viewDidLoad() - + self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "Frame 2085663258"), style: .plain, target: self, action: #selector(handleRightBarButton)) } - /* - // MARK: - Navigation - - // In a storyboard-based application, you will often want to do a little preparation before navigation - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { - // Get the new view controller using segue.destination. - // Pass the selected object to the new view controller. + @objc private func handleRightBarButton() { + + let vc = FAAppWebViewController() + vc.webUrl = kFAFeedBackListWebUrl + + self.navigationController?.pushViewController(vc, animated: true) + } - */ } diff --git a/Fableon/Class/Me/C/FAMeListViewController.swift b/Fableon/Class/Me/C/FAMeListViewController.swift new file mode 100644 index 0000000..2f956bf --- /dev/null +++ b/Fableon/Class/Me/C/FAMeListViewController.swift @@ -0,0 +1,154 @@ +// +// FAMeListViewController.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/23. +// + +import UIKit +import JXPagingView + +class FAMeListViewController: FAViewController, JXPagingViewListViewDelegate { + + var scrollCallback: ((_ : UIScrollView) -> Void)? + + private lazy var dataArr: [FAMeItemModel] = { + let arr = [ + FAMeItemModel(type: .feedback, name: "Feedback".localized, icon: UIImage(named: "icon_feedback")), + FAMeItemModel(type: .about, name: "About".localized, icon: UIImage(named: "icon_about")), +// FAMeItemModel(type: .setting, name: "Setting".localized, icon: UIImage(named: "icon_setting")) + + FAMeItemModel(type: .privacyPolicy, name: "Privacy Policy".localized, icon: UIImage(named: "icon_privacy")), + FAMeItemModel(type: .userAgreement, name: "User Agreement".localized, icon: UIImage(named: "icon_user")), + FAMeItemModel(type: .visitWebsite, name: "Visit Website".localized, icon: UIImage(named: "icon_visit")), + ] + return arr + }() + + + + private lazy var tableViewHeaderView: FAMeTableViewHeaderView = { + let view = FAMeTableViewHeaderView(frame: .init(x: 0, y: 0, width: UIScreen.width, height: 124)) + view.userInfo = FALogin.manager.userInfo + return view + }() + + private lazy var contentView: UIView = { + let view = UIView() + view.backgroundColor = ._4_D_4_A_4_A.withAlphaComponent(0.5) + view.fa_setRoundedCorner(topLeft: 28, topRight: 0, bottomLeft: 0, bottomRight: 0) + return view + }() + + private lazy var tableView: FATableView = { + let tableView = FATableView(frame: .zero, style: .plain) + tableView.delegate = self + tableView.dataSource = self + tableView.rowHeight = 56 + tableView.separatorInset = .init(top: 0, left: 32, bottom: 0, right: 32) + tableView.register(UINib(nibName: "FAMeCell", bundle: nil), forCellReuseIdentifier: "cell") +// tableView.addObserver(self, forKeyPath: "contentSize", context: nil) + return tableView + }() + + deinit { + NotificationCenter.default.removeObserver(self) + } + + override func viewDidLoad() { + super.viewDidLoad() + + NotificationCenter.default.addObserver(self, selector: #selector(userInfoUpdateNotification), name: FALogin.userInfoUpdateNotification, object: nil) + + self.bgView.isHidden = true + + fa_setupLayout() + } + + + @objc private func userInfoUpdateNotification() { + tableViewHeaderView.userInfo = FALogin.manager.userInfo + } + + func listScrollView() -> UIScrollView { + return self.tableView + } + + func listViewDidScrollCallback(callback: @escaping (UIScrollView) -> ()) { + self.scrollCallback = callback + } +} + +extension FAMeListViewController { + + private func fa_setupLayout() { + tableView.tableHeaderView = self.tableViewHeaderView + + view.addSubview(contentView) + contentView.addSubview(tableView) + + + contentView.snp.makeConstraints { make in + make.left.right.top.bottom.equalToSuperview() + } + + tableView.snp.makeConstraints { make in + make.left.right.bottom.equalToSuperview() + make.top.equalToSuperview().offset(19) + } + } +} + +//MARK: UITableViewDelegate, UITableViewDataSource +extension FAMeListViewController: UITableViewDelegate, UITableViewDataSource { + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! FAMeCell + cell.item = dataArr[indexPath.row] + return cell + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return dataArr.count + } + + func scrollViewDidScroll(_ scrollView: UIScrollView) { + self.scrollCallback?(scrollView) + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let item = dataArr[indexPath.row] + switch item.type { + case .about: + let vc = FAAboutViewController() + self.navigationController?.pushViewController(vc, animated: true) + + case .setting: + let vc = FASettingViewController() + self.navigationController?.pushViewController(vc, animated: true) + + case .feedback: + let vc = FAFeedbackViewController() + self.navigationController?.pushViewController(vc, animated: true) + + case .privacyPolicy: + let vc = FABaseWebViewController() + vc.webUrl = FAWebBaseURL + "/private" + self.navigationController?.pushViewController(vc, animated: true) + + case .userAgreement: + let vc = FABaseWebViewController() + vc.webUrl = FAWebBaseURL + "/user_policy" + self.navigationController?.pushViewController(vc, animated: true) + + case .visitWebsite: + if let url = URL(string: FAWebBaseURL) { + UIApplication.shared.open(url) + } + + default: + break + } + } +} + diff --git a/Fableon/Class/Me/C/FAMeViewController.swift b/Fableon/Class/Me/C/FAMeViewController.swift index 2f21b59..85269e9 100644 --- a/Fableon/Class/Me/C/FAMeViewController.swift +++ b/Fableon/Class/Me/C/FAMeViewController.swift @@ -7,53 +7,36 @@ import UIKit import YYText +import JXSegmentedView +import JXPagingView class FAMeViewController: FAViewController { - - private lazy var dataArr: [FAMeItemModel] = { - let arr = [ -// FAMeItemModel(type: .feedback, name: "Feedback".localized, icon: UIImage(named: "icon_feedback")), - FAMeItemModel(type: .about, name: "About".localized, icon: UIImage(named: "icon_about")), -// FAMeItemModel(type: .setting, name: "Setting".localized, icon: UIImage(named: "icon_setting")) - - FAMeItemModel(type: .privacyPolicy, name: "Privacy Policy".localized, icon: UIImage(named: "icon_privacy")), - FAMeItemModel(type: .userAgreement, name: "User Agreement".localized, icon: UIImage(named: "icon_user")), - FAMeItemModel(type: .visitWebsite, name: "Visit Website".localized, icon: UIImage(named: "icon_visit")), - ] - return arr - }() - - - private lazy var scrollView: FAScrollView = { - let scrollView = FAScrollView() - return scrollView - }() - private lazy var headerView: FAMeHeaderView = { let view = FAMeHeaderView() view.userInfo = FALogin.manager.userInfo return view }() - private lazy var contentView: UIView = { - let view = UIView() - view.backgroundColor = ._4_D_4_A_4_A.withAlphaComponent(0.5) - view.fa_setRoundedCorner(topLeft: 30, topRight: 30, bottomLeft: 0, bottomRight: 0) + private lazy var listView: FAMeListViewController = FAMeListViewController() + + private lazy var segmentedView: JXSegmentedView = { + let view = JXSegmentedView() return view }() - private lazy var tableView: FATableView = { - let tableView = FATableView(frame: .zero, style: .plain) - tableView.delegate = self - tableView.dataSource = self - tableView.rowHeight = 56 - tableView.separatorInset = .init(top: 0, left: 32, bottom: 0, right: 32) - tableView.register(UINib(nibName: "FAMeCell", bundle: nil), forCellReuseIdentifier: "cell") - tableView.addObserver(self, forKeyPath: "contentSize", context: nil) - return tableView + private lazy var pagingView: JXPagingView = { + let view = JXPagingView(delegate: self) + view.mainTableView.backgroundColor = .clear + view.listContainerView.backgroundColor = .clear + view.listContainerView.listCellBackgroundColor = .clear + view.mainTableView.fa_addRefreshHeader(insetTop: 0) { [weak self] in + self?.handleHeaderRefresh(nil) + } + return view }() + deinit { NotificationCenter.default.removeObserver(self) } @@ -62,6 +45,8 @@ class FAMeViewController: FAViewController { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(userInfoUpdateNotification), name: FALogin.userInfoUpdateNotification, object: nil) + + fa_setupLayout() } @@ -75,13 +60,12 @@ class FAMeViewController: FAViewController { FALogin.manager.requestUserInfo(completer: nil) } - override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { - if keyPath == "contentSize" { - self.updateLayout() + override func handleHeaderRefresh(_ completer: (() -> Void)?) { + FALogin.manager.requestUserInfo { [weak self] in + self?.pagingView.mainTableView.fa_endHeaderRefreshing() } } - @objc private func userInfoUpdateNotification() { headerView.userInfo = FALogin.manager.userInfo } @@ -91,98 +75,43 @@ class FAMeViewController: FAViewController { extension FAMeViewController { private func fa_setupLayout() { - view.addSubview(scrollView) - scrollView.addSubview(headerView) - scrollView.addSubview(contentView) - contentView.addSubview(tableView) + view.addSubview(pagingView) - scrollView.snp.makeConstraints { make in + pagingView.snp.makeConstraints { make in make.left.right.bottom.equalToSuperview() make.top.equalToSuperview().offset(UIScreen.safeTop) } - - headerView.snp.makeConstraints { make in - make.left.centerX.equalToSuperview() - make.top.equalToSuperview().offset(40) - } - - contentView.snp.makeConstraints { make in - make.left.centerX.equalToSuperview() - make.top.equalTo(headerView.snp.bottom).offset(24) - make.bottom.equalToSuperview() - make.height.equalTo(UIScreen.height - UIScreen.tabBarHeight - UIScreen.safeTop) - } - - tableView.snp.makeConstraints { make in - make.left.right.bottom.equalToSuperview() - make.top.equalToSuperview().offset(19) - } } - private func updateLayout() { - let maxHeight = UIScreen.height - UIScreen.tabBarHeight - UIScreen.safeTop - let minHeight = UIScreen.height - UIScreen.tabBarHeight - UIScreen.safeTop - self.headerView.height - 40 - 24 - var height = self.tableView.contentSize.height - if height > maxHeight { - height = maxHeight - } - if height < minHeight { - height = minHeight - } - - contentView.snp.updateConstraints { make in - make.height.equalTo(height) - } - } } -//MARK: UITableViewDelegate, UITableViewDataSource -extension FAMeViewController: UITableViewDelegate, UITableViewDataSource { + +//MARK: JXPagingViewDelegate +extension FAMeViewController: JXPagingViewDelegate { - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! FAMeCell - cell.item = dataArr[indexPath.row] - return cell + func pagingView(_ pagingView: JXPagingView, initListAtIndex index: Int) -> any JXPagingViewListViewDelegate { + return listView } - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return dataArr.count + func tableHeaderViewHeight(in pagingView: JXPagingView) -> Int { + return Int(ceill(headerView.contentHeight)) } - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let item = dataArr[indexPath.row] - switch item.type { - case .about: - let vc = FAAboutViewController() - self.navigationController?.pushViewController(vc, animated: true) - - case .setting: - let vc = FASettingViewController() - self.navigationController?.pushViewController(vc, animated: true) - - case .feedback: - let vc = FAFeedbackViewController() - self.navigationController?.pushViewController(vc, animated: true) - - case .privacyPolicy: - let vc = FABaseWebViewController() - vc.webUrl = FAWebBaseURL + "/private" - self.navigationController?.pushViewController(vc, animated: true) - - case .userAgreement: - let vc = FABaseWebViewController() - vc.webUrl = FAWebBaseURL + "/user_policy" - self.navigationController?.pushViewController(vc, animated: true) - - case .visitWebsite: - if let url = URL(string: FAWebBaseURL) { - UIApplication.shared.open(url) - } - - default: - break - } + func tableHeaderView(in pagingView: JXPagingView) -> UIView { + return headerView + } + + func heightForPinSectionHeader(in pagingView: JXPagingView) -> Int { + return 0 + } + + func viewForPinSectionHeader(in pagingView: JXPagingView) -> UIView { + return UIView() + } + + func numberOfLists(in pagingView: JXPagingView) -> Int { + return 1 } } + diff --git a/Fableon/Class/Me/M/FAMeItemModel.swift b/Fableon/Class/Me/M/FAMeItemModel.swift index 81aa17b..260310a 100644 --- a/Fableon/Class/Me/M/FAMeItemModel.swift +++ b/Fableon/Class/Me/M/FAMeItemModel.swift @@ -16,6 +16,12 @@ struct FAMeItemModel { case privacyPolicy case userAgreement case visitWebsite + ///消费记录 + case consumptionRecords + ///购买记录 + case purchaseRecords + ///金币奖励 + case rewardCoins } diff --git a/Fableon/Class/Me/V/FAMeCoinsView.swift b/Fableon/Class/Me/V/FAMeCoinsView.swift new file mode 100644 index 0000000..9bf556c --- /dev/null +++ b/Fableon/Class/Me/V/FAMeCoinsView.swift @@ -0,0 +1,83 @@ +// +// FAMeCoinsView.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/22. +// + +import UIKit + +class FAMeCoinsView: UIControl { + + var title: String? { + didSet { + titleLabel.text = title + } + } + + var count: Int = 0 { + didSet { + coinLabel.text = "\(count)" + } + } + + private lazy var coinImageView: UIImageView = { + let imageView = UIImageView(image: UIImage(named: "coins_icon_01")) + imageView.setContentHuggingPriority(.required, for: .horizontal) + imageView.setContentCompressionResistancePriority(.required, for: .horizontal) + return imageView + }() + + private lazy var titleLabel: UILabel = { + let label = UILabel() + label.font = .font(ofSize: 10, weight: .bold) + label.textColor = .F_7_F_497 + return label + }() + + private lazy var coinLabel: UILabel = { + let label = UILabel() + label.font = .font(ofSize: 14, weight: .bold) + label.textColor = .FFFFFF + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + + fa_setupLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + +extension FAMeCoinsView { + + private func fa_setupLayout() { + addSubview(coinImageView) + addSubview(titleLabel) + addSubview(coinLabel) + + coinImageView.snp.makeConstraints { make in + make.left.equalToSuperview() + make.centerY.equalToSuperview() + make.top.equalToSuperview() + } + + titleLabel.snp.makeConstraints { make in + make.top.equalToSuperview().offset(-2) + make.left.equalTo(coinImageView.snp.right).offset(10) + make.right.lessThanOrEqualToSuperview() + } + + coinLabel.snp.makeConstraints { make in + make.left.equalTo(titleLabel) + make.right.lessThanOrEqualToSuperview() + make.bottom.equalToSuperview().offset(0) + } + } + +} diff --git a/Fableon/Class/Me/V/FAMeHeaderView.swift b/Fableon/Class/Me/V/FAMeHeaderView.swift index 4514e01..604c596 100644 --- a/Fableon/Class/Me/V/FAMeHeaderView.swift +++ b/Fableon/Class/Me/V/FAMeHeaderView.swift @@ -9,6 +9,8 @@ import UIKit class FAMeHeaderView: UIView { + var contentHeight: CGFloat = 40 + 66 + 40 + 28 + 24 + var userInfo: FAUserInfo? { didSet { avatarImageView.fa_setImage(userInfo?.avator) @@ -16,6 +18,10 @@ class FAMeHeaderView: UIView { userNameLabel.text = userInfo?.getNickName() idLabel.text = "ID:\(userInfo?.customer_id ?? "")" + + coinsView.count = userInfo?.coin_left_total ?? 0 + + bonusCoinsView.count = userInfo?.send_coin_left_total ?? 0 } } @@ -39,6 +45,31 @@ class FAMeHeaderView: UIView { return label }() + private lazy var coinsView: FAMeCoinsView = { + let view = FAMeCoinsView() + view.title = "Coins".localized + view.count = 0 + view.addAction(UIAction(handler: { [weak self] _ in + guard let self = self else { return } + let vc = FAWalletViewController() + self.viewController?.navigationController?.pushViewController(vc, animated: true) + }), for: .touchUpInside) + return view + }() + + private lazy var bonusCoinsView: FAMeCoinsView = { + let view = FAMeCoinsView() + view.title = "Bonus" + view.count = 0 + view.addAction(UIAction(handler: { [weak self] _ in + guard let self = self else { return } + let vc = FAWalletViewController() + self.viewController?.navigationController?.pushViewController(vc, animated: true) + }), for: .touchUpInside) + return view + }() + + override init(frame: CGRect) { super.init(frame: frame) fa_setupLayout() @@ -55,12 +86,13 @@ extension FAMeHeaderView { addSubview(avatarImageView) addSubview(userNameLabel) addSubview(idLabel) + addSubview(coinsView) + addSubview(bonusCoinsView) avatarImageView.snp.makeConstraints { make in make.left.equalToSuperview().offset(16) - make.top.equalToSuperview() + make.top.equalToSuperview().offset(40) make.width.height.equalTo(66) - make.bottom.equalToSuperview() } userNameLabel.snp.makeConstraints { make in @@ -73,6 +105,16 @@ extension FAMeHeaderView { make.left.equalTo(userNameLabel) make.top.equalTo(userNameLabel.snp.bottom).offset(2) } + + coinsView.snp.makeConstraints { make in + make.left.equalToSuperview().offset(16) + make.top.equalTo(avatarImageView.snp.bottom).offset(40) + } + + bonusCoinsView.snp.makeConstraints { make in + make.top.equalTo(coinsView) + make.left.equalTo(coinsView.snp.right).offset(40) + } } } diff --git a/Fableon/Class/Me/V/FAMeTableViewHeaderView.swift b/Fableon/Class/Me/V/FAMeTableViewHeaderView.swift new file mode 100644 index 0000000..78711bd --- /dev/null +++ b/Fableon/Class/Me/V/FAMeTableViewHeaderView.swift @@ -0,0 +1,165 @@ +// +// FAMeTableViewHeaderView.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/22. +// + +import UIKit + +class FAMeTableViewHeaderView: UIView { + + var userInfo: FAUserInfo? { + didSet { + if userInfo?.is_vip == true { + subscribeView.isHidden = true + expirationView.isHidden = false + vipImageView.image = UIImage(named: "vip_image_02") + titleLabel.text = "Activated".localized + subtitleLabel.text = "vip_tip_01".localized + } else { + subscribeView.isHidden = false + expirationView.isHidden = true + vipImageView.image = UIImage(named: "vip_image_01") + titleLabel.text = "Not Activated".localized + subtitleLabel.text = "vip_tip_02".localized + } + + + expirationView.setNeedsUpdateConfiguration() + } + } + + private lazy var contentView: FAGradientView = { + let view = FAGradientView() + view.fa_colors = [UIColor.C_3_FAFF.cgColor, UIColor._7_FDBF_5.cgColor, UIColor._105_C_91.cgColor] + view.fa_locations = [0, 0.5, 1] + view.fa_startPoint = .init(x: 0, y: 0.5) + view.fa_endPoint = .init(x: 1, y: 0.5) + view.fa_setRoundedCorner(topLeft: 28, topRight: 6, bottomLeft: 6, bottomRight: 6) + return view + }() + + private lazy var vipImageView: UIImageView = { + let imageView = UIImageView(image: UIImage(named: "vip_image_01")) + return imageView + }() + + private lazy var titleLabel: UILabel = { + let label = UILabel() + label.font = .font(ofSize: 18, weight: .bold) + label.textColor = ._3_A_271_E + return label + }() + + private lazy var subtitleLabel: UILabel = { + let label = UILabel() + label.font = .font(ofSize: 12, weight: .regular) + label.textColor = ._000000.withAlphaComponent(0.5) + return label + }() + + private lazy var subscribeView: UIButton = { + var config = UIButton.Configuration.plain() + config.attributedTitle = AttributedString("Subscribe".localized, attributes: AttributeContainer([ + .font : UIFont.font(ofSize: 14, weight: .bold), + .foregroundColor : UIColor._333333 + ])) + + let button = FAGradientButton(configuration: config) + button.isUserInteractionEnabled = false + button.layer.cornerRadius = 18 + button.layer.masksToBounds = true + button.fa_colors = [UIColor.BEDFFF.cgColor, UIColor._52_A_2_F_1.cgColor] + button.fa_locations = [0, 1] + button.fa_startPoint = .init(x: 0, y: 0.5) + button.fa_endPoint = .init(x: 1, y: 0.5) + return button + }() + + private lazy var expirationView: UIButton = { + var config = UIButton.Configuration.plain() + config.contentInsets = .zero + config.image = UIImage(named: "Frame 3021") + config.imagePadding = 4 + + let button = UIButton(configuration: config) + button.isUserInteractionEnabled = false + button.configurationUpdateHandler = { [weak self] button in + guard let self = self else { return } + + let date = Date(timeIntervalSince1970: userInfo?.vip_end_time ?? 0) + let text = "vip_expires_date".localizedReplace(text: date.fa_formatString("yyyy-MM-dd")) + button.configuration?.attributedTitle = AttributedString(text, attributes: AttributeContainer([ + .font : UIFont.font(ofSize: 12, weight: .medium), + .foregroundColor : UIColor._3_A_271_E + ])) + } + return button + }() + + override init(frame: CGRect) { + super.init(frame: frame) + + let tap = UITapGestureRecognizer { [weak self] _ in + guard let self = self else { return } + let vc = FAStoreViewController() + self.viewController?.navigationController?.pushViewController(vc, animated: true) + } + contentView.addGestureRecognizer(tap) + + fa_setupLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + +extension FAMeTableViewHeaderView { + + private func fa_setupLayout() { + addSubview(contentView) + contentView.addSubview(vipImageView) + contentView.addSubview(titleLabel) + contentView.addSubview(subtitleLabel) + contentView.addSubview(subscribeView) + contentView.addSubview(expirationView) + + contentView.snp.makeConstraints { make in + make.left.equalToSuperview().offset(16) + make.centerX.equalToSuperview() + make.top.bottom.equalToSuperview() + } + + vipImageView.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.right.equalToSuperview().offset(-4) + } + + titleLabel.snp.makeConstraints { make in + make.left.equalToSuperview().offset(16) + make.top.equalToSuperview().offset(16) + } + + subtitleLabel.snp.makeConstraints { make in + make.left.equalToSuperview().offset(16) + make.top.equalTo(titleLabel.snp.bottom).offset(3) + } + + subscribeView.snp.makeConstraints { make in + make.left.equalToSuperview().offset(16) + make.bottom.equalToSuperview().offset(-16) + make.height.equalTo(36) + make.width.equalTo(130) + } + + expirationView.snp.makeConstraints { make in + make.left.equalToSuperview().offset(16) + make.bottom.equalToSuperview().offset(-16) + } + + } + +} diff --git a/Fableon/Class/Player/M/FAVideoUnlockResult.swift b/Fableon/Class/Player/M/FAVideoUnlockResult.swift new file mode 100644 index 0000000..21d4e6b --- /dev/null +++ b/Fableon/Class/Player/M/FAVideoUnlockResult.swift @@ -0,0 +1,26 @@ +// +// FAVideoUnlockResult.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/21. +// + +import UIKit +import SmartCodable + +struct FAVideoUnlockResult: SmartCodable { + + enum Status: String, SmartCaseDefaultable { + ///前面还有没购买的剧 + case jump = "jump" + ///没找到视频 + case noPlay = "no_play" + ///金币不足跳充值 + case notEnough = "not_enough" + ///购买成功 + case success = "success" + } + + var status: Status? + +} diff --git a/Fableon/Class/Player/V/FAEpSelectorCell.swift b/Fableon/Class/Player/V/FAEpSelectorCell.swift index 63fd8fa..bcdc4ad 100644 --- a/Fableon/Class/Player/V/FAEpSelectorCell.swift +++ b/Fableon/Class/Player/V/FAEpSelectorCell.swift @@ -12,6 +12,8 @@ class FAEpSelectorCell: UICollectionViewCell { var model: FAVideoInfoModel? { didSet { numberLabel.text = model?.episode + + lockImageView.isHidden = !(model?.is_lock ?? true) } } @@ -31,6 +33,9 @@ class FAEpSelectorCell: UICollectionViewCell { @IBOutlet weak var numberLabel: UILabel! + @IBOutlet weak var lockImageView: UIImageView! + + override func awakeFromNib() { super.awakeFromNib() self.layer.masksToBounds = false diff --git a/Fableon/Class/Player/V/FAEpSelectorCell.xib b/Fableon/Class/Player/V/FAEpSelectorCell.xib index 67bc00c..3281f19 100644 --- a/Fableon/Class/Player/V/FAEpSelectorCell.xib +++ b/Fableon/Class/Player/V/FAEpSelectorCell.xib @@ -23,18 +23,27 @@ + + + + + + + + + diff --git a/Fableon/Class/Player/V/FAPlayerDetailCell.swift b/Fableon/Class/Player/V/FAPlayerDetailCell.swift index ae930bd..4538d57 100644 --- a/Fableon/Class/Player/V/FAPlayerDetailCell.swift +++ b/Fableon/Class/Player/V/FAPlayerDetailCell.swift @@ -14,11 +14,17 @@ class FAPlayerDetailCell: JXPlayerListCell { return FAPlayerDetailControlView.self } + var fa_viewModel: FAShortDetailViewModel { + return self.viewModel as! FAShortDetailViewModel + } override var model: Any? { didSet { let model = self.model as? FAVideoInfoModel self.player.setPlayUrl(url: model?.video_url ?? "") + + self.lockView.isHidden = !(model?.is_lock ?? true) + lockView.videoInfo = model } } @@ -29,9 +35,26 @@ class FAPlayerDetailCell: JXPlayerListCell { } } + var hasLastEpisodeUnlocked: Bool = false { + didSet { + self.lockView.hasLastEpisodeUnlocked = hasLastEpisodeUnlocked + } + } + + + + private lazy var lockView: FAVideoLockView = { + let view = FAVideoLockView() + view.clickUnlockButton = { [weak self] in + self?.fa_viewModel.handleUnlockVideo() + } + return view + }() + override init(frame: CGRect) { super.init(frame: frame) + fa_setupLayout() } @MainActor required init?(coder: NSCoder) { @@ -41,6 +64,18 @@ class FAPlayerDetailCell: JXPlayerListCell { } +extension FAPlayerDetailCell { + + private func fa_setupLayout() { + addSubview(lockView) + + lockView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } + +} + extension FAPlayerDetailCell { override func jx_playerReadyToPlay(_ player: JXPlayer) { diff --git a/Fableon/Class/Player/V/FAPlayerDetailControlView.swift b/Fableon/Class/Player/V/FAPlayerDetailControlView.swift index 21bf133..9b1a59e 100644 --- a/Fableon/Class/Player/V/FAPlayerDetailControlView.swift +++ b/Fableon/Class/Player/V/FAPlayerDetailControlView.swift @@ -24,7 +24,7 @@ class FAPlayerDetailControlView: JXPlayerListControlView { override var model: Any? { didSet { -// let model = self.model as? FAVideoInfoModel + let model = self.model as? FAVideoInfoModel updateEp() } @@ -133,6 +133,8 @@ class FAPlayerDetailControlView: JXPlayerListControlView { return button }() + + deinit { NotificationCenter.default.removeObserver(self) } @@ -230,6 +232,8 @@ extension FAPlayerDetailControlView { make.height.equalTo(44) } + + } } diff --git a/Fableon/Class/Player/V/FAVideoLockView.swift b/Fableon/Class/Player/V/FAVideoLockView.swift new file mode 100644 index 0000000..d0eefee --- /dev/null +++ b/Fableon/Class/Player/V/FAVideoLockView.swift @@ -0,0 +1,80 @@ +// +// FAVideoLockView.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/20. +// + +import UIKit + +class FAVideoLockView: UIView { + + var clickUnlockButton: (() -> Void)? + + var videoInfo: FAVideoInfoModel? { + didSet { + unlockButton.setNeedsUpdateConfiguration() + } + } + + var hasLastEpisodeUnlocked = false { + didSet { + unlockButton.setNeedsUpdateConfiguration() + } + } + + private lazy var unlockButton: UIButton = { + var config = UIButton.Configuration.plain() + config.image = UIImage(named: "lock_icon_02") + config.imagePadding = 6 + + let button = FAGradientButton(configuration: config, primaryAction: UIAction(handler: { [weak self] _ in + guard let self = self else { return } + self.clickUnlockButton?() + })) + button.configurationUpdateHandler = { [weak self] button in + guard let self = self else { return } + let attributeContainer = AttributeContainer([ + .font : UIFont.font(ofSize: 14, weight: .medium), + .foregroundColor : UIColor._000000 + ]) + if hasLastEpisodeUnlocked { + button.configuration?.attributedTitle = .init("video_lock_tip_text".localized, attributes: attributeContainer) + } else { + button.configuration?.attributedTitle = .init("Unlocking costs ## coins".localizedReplace(text: "\(videoInfo?.coins ?? 0)"), attributes: attributeContainer) + } + } + button.layer.cornerRadius = 26 + button.layer.masksToBounds = true + button.fa_colors = [UIColor.BEDFFF.cgColor, UIColor._52_A_2_F_1.cgColor] + button.fa_locations = [0, 1] + button.fa_startPoint = .init(x: 0, y: 0.5) + button.fa_endPoint = .init(x: 1, y: 0.5) + return button + }() + + override init(frame: CGRect) { + super.init(frame: frame) + backgroundColor = ._000000.withAlphaComponent(0.6) + fa_setupLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + +extension FAVideoLockView { + + private func fa_setupLayout() { + addSubview(unlockButton) + + unlockButton.snp.makeConstraints { make in + make.center.equalToSuperview() + make.left.equalToSuperview().offset(44) + make.height.equalTo(52) + } + } + +} diff --git a/Fableon/Class/Player/VC/FAPlayerDetailViewController.swift b/Fableon/Class/Player/VC/FAPlayerDetailViewController.swift index 7a1d05f..f8ab0d1 100644 --- a/Fableon/Class/Player/VC/FAPlayerDetailViewController.swift +++ b/Fableon/Class/Player/VC/FAPlayerDetailViewController.swift @@ -13,6 +13,7 @@ import FDFullscreenPopGesture class FAPlayerDetailViewController: JXPlayerListViewController { var shortPlayId: String? + var activityId: String? override var ViewModelClass: JXPlayerListViewModel.Type { return FAShortDetailViewModel.self @@ -77,10 +78,16 @@ class FAPlayerDetailViewController: JXPlayerListViewController { } override func play() { - super.play() - let videoInfo = self.viewModel.currentCell?.model as? FAVideoInfoModel - FAAPI.requestCreatePlayHistory(videoId: videoInfo?.short_play_video_id, shortPlayId: videoInfo?.short_play_id) + + if videoInfo?.is_lock != true { + super.play() + FAAPI.requestCreatePlayHistory(videoId: videoInfo?.short_play_video_id, shortPlayId: videoInfo?.short_play_id) + return + } + self.pause() + + } } @@ -110,6 +117,13 @@ extension FAPlayerDetailViewController: JXPlayerListViewControllerDelegate, JXPl let cell = self.dequeueReusableCell(withReuseIdentifier: "FAPlayerDetailCell", for: indexPath) as! FAPlayerDetailCell cell.model = self.fa_viewModel.dataArr[indexPath.section].episodeList?[indexPath.row] cell.shortModel = self.fa_viewModel.dataArr[indexPath.section].shortPlayInfo + + let upRow = indexPath.row - 1 + if upRow >= 0, let videoInfo = self.fa_viewModel.dataArr[indexPath.section].episodeList?[upRow], videoInfo.is_lock == true { + cell.hasLastEpisodeUnlocked = true + } else { + cell.hasLastEpisodeUnlocked = false + } return cell } diff --git a/Fableon/Class/Player/VM/FAShortDetailViewModel.swift b/Fableon/Class/Player/VM/FAShortDetailViewModel.swift index f297f69..5766c34 100644 --- a/Fableon/Class/Player/VM/FAShortDetailViewModel.swift +++ b/Fableon/Class/Player/VM/FAShortDetailViewModel.swift @@ -110,5 +110,61 @@ extension FAShortDetailViewModel { self.popView = view } + func handleUnlockVideo() { + unlockVideo { [weak self] finish in + if finish { + self?.playerListVC?.reloadData { + self?.playerListVC?.play() + } + } + } + } + + ///打开充值页面 + func openRechargeView() { + guard let videoInfo = self.currentCell?.model as? FAVideoInfoModel else { return } + guard self.popView == nil else { return } + + + + + } + +} + +extension FAShortDetailViewModel { + + private func unlockVideo(completer: ((_ finish: Bool) -> Void)?) { + guard let videoInfo = self.currentCell?.model as? FAVideoInfoModel else { return } + guard let shortPlayId = videoInfo.short_play_id else { return } + guard let videoId = videoInfo.short_play_video_id else { return } + + FAAPI.requestCoinUnlockVideo(shortPlayId: shortPlayId, videoId: videoId) { [weak self] model in + guard let self = self else { return } + guard let model = model else { + completer?(false) + return + } + + switch model.status { + case .jump: + FAToast.show(text: "buy_fail_toast_02".localized) + case .noPlay: + FAToast.show(text: "buy_fail_toast_01".localized) + case .notEnough: + self.openRechargeView() + default: break + } + + if model.status == .success { + FALogin.manager.requestUserInfo { + videoInfo.is_lock = false + completer?(true) + } + } else { + completer?(false) + } + } + } } diff --git a/Fableon/Class/Store/C/FACoinRecordViewController.swift b/Fableon/Class/Store/C/FACoinRecordViewController.swift new file mode 100644 index 0000000..ca8b2af --- /dev/null +++ b/Fableon/Class/Store/C/FACoinRecordViewController.swift @@ -0,0 +1,52 @@ +// +// FACoinRecordViewController.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/23. +// + +import UIKit + +class FACoinRecordViewController: FAViewController { + + + private lazy var tableView: FATableView = { + let tableView = FATableView(frame: .zero, style: .plain) + tableView.delegate = self + tableView.dataSource = self + tableView.rowHeight = 72 + tableView.separatorColor = .FFFFFF.withAlphaComponent(0.1) + tableView.separatorInset = .init(top: 0, left: 16, bottom: 0, right: 16) + tableView.contentInset = .init(top: 10, left: 0, bottom: UIScreen.safeBottom + 10, right: 0) + tableView.register(UINib(nibName: "FAOrderRecordCell", bundle: nil), forCellReuseIdentifier: "cell") + return tableView + }() + + override func viewDidLoad() { + super.viewDidLoad() + bgView.isHidden = true + + view.addSubview(tableView) + + tableView.snp.makeConstraints { make in + make.left.right.bottom.equalToSuperview() + make.top.equalToSuperview() + } + } + + +} + +//MARK: UITableViewDelegate UITableViewDataSource +extension FACoinRecordViewController: UITableViewDelegate, UITableViewDataSource { + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! FAOrderRecordCell + return cell + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 20 + } + +} diff --git a/Fableon/Class/Store/C/FAConsumptionRecordsViewController.swift b/Fableon/Class/Store/C/FAConsumptionRecordsViewController.swift new file mode 100644 index 0000000..bff7493 --- /dev/null +++ b/Fableon/Class/Store/C/FAConsumptionRecordsViewController.swift @@ -0,0 +1,66 @@ +// +// FAConsumptionRecordsViewController.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/23. +// + +import UIKit + +class FAConsumptionRecordsViewController: FAViewController { + + + private lazy var tableView: FATableView = { + let tableView = FATableView(frame: .zero, style: .plain) + tableView.delegate = self + tableView.dataSource = self + tableView.rowHeight = 71 + tableView.separatorColor = .FFFFFF.withAlphaComponent(0.1) + tableView.separatorInset = .init(top: 0, left: 34, bottom: 0, right: 34) + tableView.contentInset = .init(top: 10, left: 0, bottom: UIScreen.safeBottom + 10, right: 0) + tableView.register(UINib(nibName: "FAConsumptionRecordsCell", bundle: nil), forCellReuseIdentifier: "cell") + return tableView + }() + + override func viewDidLoad() { + super.viewDidLoad() + self.title = "Consumption Records".localized + + fa_setupLayout() + } + + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.setNavigationBarHidden(false, animated: true) + fa_setNavigationStyle() + } + +} + +extension FAConsumptionRecordsViewController { + + private func fa_setupLayout() { + view.addSubview(tableView) + + tableView.snp.makeConstraints { make in + make.left.right.bottom.equalToSuperview() + make.top.equalToSuperview().offset(UIScreen.navBarHeight) + } + } + +} + + +//MARK: UITableViewDelegate UITableViewDataSource +extension FAConsumptionRecordsViewController: UITableViewDelegate, UITableViewDataSource { + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! FAConsumptionRecordsCell + return cell + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 20 + } +} diff --git a/Fableon/Class/Store/C/FAOrderRecordsViewController.swift b/Fableon/Class/Store/C/FAOrderRecordsViewController.swift new file mode 100644 index 0000000..7a2bac1 --- /dev/null +++ b/Fableon/Class/Store/C/FAOrderRecordsViewController.swift @@ -0,0 +1,112 @@ +// +// FAOrderRecordsViewController.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/23. +// + +import UIKit +import JXSegmentedView + +class FAOrderRecordsViewController: FAViewController { + + private lazy var titles = ["Coin Record".localized, "VIP Record".localized] + private lazy var viewControllers = [FACoinRecordViewController(), FAVipRecordViewController()] + + private lazy var segmentedDataSource: JXSegmentedTitleDataSource = { + let dataSource = JXSegmentedTitleDataSource() + dataSource.itemWidth = (UIScreen.width - 32 - 24) / CGFloat(titles.count) + dataSource.titles = titles + dataSource.isTitleMaskEnabled = true + dataSource.titleNormalColor = .FFFFFF.withAlphaComponent(0.5) + dataSource.titleSelectedColor = ._333333 + dataSource.titleNormalFont = .font(ofSize: 14, weight: .bold) + dataSource.titleSelectedFont = .font(ofSize: 14, weight: .bold) + dataSource.itemSpacing = 0 + return dataSource + }() + + private lazy var segmentedIndicator: JXSegmentedIndicatorBackgroundView = { + let indicator = JXSegmentedIndicatorBackgroundView() + indicator.indicatorHeight = 36 + indicator.indicatorWidthIncrement = 0 + indicator.indicatorColor = ._74_BBFF + return indicator + }() + + private lazy var segmentedView: JXSegmentedView = { + let view = JXSegmentedView() + view.backgroundColor = .FFFFFF.withAlphaComponent(0.15) + view.layer.cornerRadius = 24 + view.layer.masksToBounds = true + view.dataSource = segmentedDataSource + view.delegate = self + view.indicators = [segmentedIndicator] + view.listContainer = listContainerView + return view + }() + + private lazy var listContainerView: JXSegmentedListContainerView = { + let view = JXSegmentedListContainerView(dataSource: self) + return view + }() + + + + + override func viewDidLoad() { + super.viewDidLoad() + self.title = "Order Records".localized + + fa_setupLayout() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.setNavigationBarHidden(false, animated: true) + fa_setNavigationStyle() + } + + +} + +extension FAOrderRecordsViewController { + + private func fa_setupLayout() { + view.addSubview(segmentedView) + view.addSubview(listContainerView) + + segmentedView.snp.makeConstraints { make in + make.left.equalToSuperview().offset(16) + make.centerX.equalToSuperview() + make.top.equalToSuperview().offset(20 + UIScreen.navBarHeight) + make.height.equalTo(48) + } + + listContainerView.snp.makeConstraints { make in + make.left.right.bottom.equalToSuperview() + make.top.equalTo(segmentedView.snp.bottom) + } + } + + +} + +//MARK: JXSegmentedViewDelegate +extension FAOrderRecordsViewController: JXSegmentedViewDelegate { + func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) { + + } +} + +//MARK: JXSegmentedViewDelegate +extension FAOrderRecordsViewController: JXSegmentedListContainerViewDataSource { + func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> any JXSegmentedListContainerViewListDelegate { + return viewControllers[index] + } + + func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int { + return self.titles.count + } + +} diff --git a/Fableon/Class/Store/C/FARewardCoinsViewController.swift b/Fableon/Class/Store/C/FARewardCoinsViewController.swift new file mode 100644 index 0000000..6cd6063 --- /dev/null +++ b/Fableon/Class/Store/C/FARewardCoinsViewController.swift @@ -0,0 +1,55 @@ +// +// FARewardCoinsViewController.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/23. +// + +import UIKit + +class FARewardCoinsViewController: FAViewController { + + private lazy var tableView: FATableView = { + let tableView = FATableView(frame: .zero, style: .plain) + tableView.delegate = self + tableView.dataSource = self + tableView.rowHeight = 87 + tableView.separatorColor = .FFFFFF.withAlphaComponent(0.1) + tableView.separatorInset = .init(top: 0, left: 16, bottom: 0, right: 16) + tableView.contentInset = .init(top: 10, left: 0, bottom: UIScreen.safeBottom + 10, right: 0) + tableView.register(UINib(nibName: "FARewardCoinsCell", bundle: nil), forCellReuseIdentifier: "cell") + return tableView + }() + + override func viewDidLoad() { + super.viewDidLoad() + self.title = "Reward coins" + + view.addSubview(tableView) + + tableView.snp.makeConstraints { make in + make.left.right.bottom.equalToSuperview() + make.top.equalToSuperview().offset(UIScreen.navBarHeight + 10) + } + } + + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.setNavigationBarHidden(false, animated: true) + fa_setNavigationStyle() + } + +} + +//MARK: UITableViewDelegate UITableViewDataSource +extension FARewardCoinsViewController: UITableViewDelegate, UITableViewDataSource { + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! FARewardCoinsCell + return cell + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 20 + } +} diff --git a/Fableon/Class/Store/C/FAStoreViewController.swift b/Fableon/Class/Store/C/FAStoreViewController.swift new file mode 100644 index 0000000..f266285 --- /dev/null +++ b/Fableon/Class/Store/C/FAStoreViewController.swift @@ -0,0 +1,58 @@ +// +// FAStoreViewController.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/22. +// + +import UIKit + +class FAStoreViewController: FAViewController { + + private lazy var scrollView: FAScrollView = { + let scrollView = FAScrollView() + return scrollView + }() + + private lazy var titleLabel: UILabel = { + let label = UILabel() + label.font = .font(ofSize: 12, weight: .medium) + label.textColor = .FFFFFF + label.text = "store_title_1".localized + return label + }() + + override func viewDidLoad() { + super.viewDidLoad() + self.title = "Store".localized + + fa_setupLayout() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.setNavigationBarHidden(false, animated: true) + fa_setNavigationStyle() + } + + +} + +extension FAStoreViewController { + + private func fa_setupLayout() { + view.addSubview(scrollView) + scrollView.addSubview(titleLabel) + + scrollView.snp.makeConstraints { make in + make.left.right.bottom.equalToSuperview() + make.top.equalToSuperview().offset(UIScreen.navBarHeight) + } + + titleLabel.snp.makeConstraints { make in + make.top.equalToSuperview().offset(0) + make.centerX.equalToSuperview() + } + } + +} diff --git a/Fableon/Class/Store/C/FAVipRecordViewController.swift b/Fableon/Class/Store/C/FAVipRecordViewController.swift new file mode 100644 index 0000000..e0302ed --- /dev/null +++ b/Fableon/Class/Store/C/FAVipRecordViewController.swift @@ -0,0 +1,53 @@ +// +// FAVipRecordViewController.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/23. +// + +import UIKit + +class FAVipRecordViewController: FAViewController { + + private lazy var tableView: FATableView = { + let tableView = FATableView(frame: .zero, style: .plain) + tableView.delegate = self + tableView.dataSource = self + tableView.rowHeight = 72 + tableView.separatorColor = .FFFFFF.withAlphaComponent(0.1) + tableView.separatorInset = .init(top: 0, left: 16, bottom: 0, right: 16) + tableView.contentInset = .init(top: 10, left: 0, bottom: UIScreen.safeBottom + 10, right: 0) + tableView.register(UINib(nibName: "FAOrderRecordCell", bundle: nil), forCellReuseIdentifier: "cell") + return tableView + }() + + override func viewDidLoad() { + super.viewDidLoad() + bgView.isHidden = true + + view.addSubview(tableView) + + tableView.snp.makeConstraints { make in + make.left.right.bottom.equalToSuperview() + make.top.equalToSuperview() + } + } + + + +} + +//MARK: UITableViewDelegate UITableViewDataSource +extension FAVipRecordViewController: UITableViewDelegate, UITableViewDataSource { + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! FAOrderRecordCell + cell.iconImageView.isHidden = true + return cell + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return 20 + } + +} diff --git a/Fableon/Class/Store/C/FAWalletViewController.swift b/Fableon/Class/Store/C/FAWalletViewController.swift new file mode 100644 index 0000000..d0514f9 --- /dev/null +++ b/Fableon/Class/Store/C/FAWalletViewController.swift @@ -0,0 +1,115 @@ +// +// FAWalletViewController.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/22. +// + +import UIKit + +class FAWalletViewController: FAViewController { + + private lazy var dataArr: [FAMeItemModel] = [ + FAMeItemModel(type: .consumptionRecords, name: "Consumption Records".localized), + FAMeItemModel(type: .purchaseRecords, name: "Purchase Records".localized), + FAMeItemModel(type: .rewardCoins, name: "Reward Coins".localized), + ] + + private lazy var tableView: FATableView = { + let tableView = FATableView(frame: .zero, style: .plain) + tableView.delegate = self + tableView.dataSource = self + tableView.rowHeight = 46 + tableView.separatorColor = .FFFFFF.withAlphaComponent(0.1) + tableView.separatorInset = .init(top: 0, left: 32, bottom: 0, right: 32) + tableView.register(UINib(nibName: "FAWalletCell", bundle: nil), forCellReuseIdentifier: "cell") + return tableView + }() + + private lazy var headerView: FAWalletHeaderView = { + let view = FAWalletHeaderView(frame: .init(x: 0, y: 0, width: UIScreen.width, height: 190)) + view.userInfo = FALogin.manager.userInfo + return view + }() + + deinit { + NotificationCenter.default.removeObserver(self) + } + + override func viewDidLoad() { + super.viewDidLoad() + self.title = "My Wallet".localized + NotificationCenter.default.addObserver(self, selector: #selector(userInfoUpdateNotification), name: FALogin.userInfoUpdateNotification, object: nil) + + fa_setupLayout() + } + + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.setNavigationBarHidden(false, animated: true) + fa_setNavigationStyle() + } + + @objc private func userInfoUpdateNotification() { + headerView.userInfo = FALogin.manager.userInfo + } +} + +extension FAWalletViewController { + + private func fa_setupLayout() { + tableView.tableHeaderView = self.headerView + + view.addSubview(tableView) + + tableView.snp.makeConstraints { make in + make.left.right.bottom.equalToSuperview() + make.top.equalToSuperview().offset(UIScreen.navBarHeight) + } + } + +} + +//MARK: UITableViewDelegate UITableViewDataSource +extension FAWalletViewController: UITableViewDelegate, UITableViewDataSource { + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! FAWalletCell + cell.item = dataArr[indexPath.row] + return cell + } + + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return dataArr.count + } + + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { + let item = dataArr[indexPath.row] + + var vc: FAViewController? + + switch item.type { + case .consumptionRecords: + vc = FAConsumptionRecordsViewController() + + case .purchaseRecords: + vc = FAOrderRecordsViewController() + + case .rewardCoins: + vc = FARewardCoinsViewController() + + default: + break + } + + if let vc = vc { + self.navigationController?.pushViewController(vc, animated: true) + } + + + } + + + +} diff --git a/Fableon/Class/Store/V/FAConsumptionRecordsCell.swift b/Fableon/Class/Store/V/FAConsumptionRecordsCell.swift new file mode 100644 index 0000000..071ec3e --- /dev/null +++ b/Fableon/Class/Store/V/FAConsumptionRecordsCell.swift @@ -0,0 +1,37 @@ +// +// FAConsumptionRecordsCell.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/23. +// + +import UIKit + +class FAConsumptionRecordsCell: FATableViewCell { + + + @IBOutlet weak var titleLabel: UILabel! + + @IBOutlet weak var subtitleLabel: UILabel! + + @IBOutlet weak var dateLabel: UILabel! + + @IBOutlet weak var coinsLabel: UILabel! + + + override func awakeFromNib() { + super.awakeFromNib() + + titleLabel.text = "Purchase Single Episode dafdaaafafaafdasfadfsafdafadsadfas"; + subtitleLabel.text = "Ep.8 Romantic Flash Marriage In Progress" + dateLabel.text = "2024-6-10 23:41:18" + coinsLabel.text = "-10 Coins" + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + +} diff --git a/Fableon/Class/Store/V/FAConsumptionRecordsCell.xib b/Fableon/Class/Store/V/FAConsumptionRecordsCell.xib new file mode 100644 index 0000000..34f879b --- /dev/null +++ b/Fableon/Class/Store/V/FAConsumptionRecordsCell.xib @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Fableon/Class/Store/V/FAOrderRecordCell.swift b/Fableon/Class/Store/V/FAOrderRecordCell.swift new file mode 100644 index 0000000..3b11218 --- /dev/null +++ b/Fableon/Class/Store/V/FAOrderRecordCell.swift @@ -0,0 +1,33 @@ +// +// FAOrderRecordCell.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/23. +// + +import UIKit + +class FAOrderRecordCell: FATableViewCell { + + + @IBOutlet weak var titleLabel: UILabel! + + @IBOutlet weak var dateLabel: UILabel! + + @IBOutlet weak var countLabel: UILabel! + + @IBOutlet weak var iconImageView: UIImageView! + + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + +} diff --git a/Fableon/Class/Store/V/FAOrderRecordCell.xib b/Fableon/Class/Store/V/FAOrderRecordCell.xib new file mode 100644 index 0000000..48dc8a9 --- /dev/null +++ b/Fableon/Class/Store/V/FAOrderRecordCell.xib @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Fableon/Class/Store/V/FARewardCoinsCell.swift b/Fableon/Class/Store/V/FARewardCoinsCell.swift new file mode 100644 index 0000000..39f2bb1 --- /dev/null +++ b/Fableon/Class/Store/V/FARewardCoinsCell.swift @@ -0,0 +1,43 @@ +// +// FARewardCoinsCell.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/23. +// + +import UIKit + +class FARewardCoinsCell: FATableViewCell { + + + @IBOutlet weak var dateLabel: UILabel! + + @IBOutlet weak var nameLabel: UILabel! + + @IBOutlet weak var expiresIconImageView: UIImageView! + + @IBOutlet weak var expiresLabel: UILabel! + + @IBOutlet weak var expiredLabel: UILabel! + + @IBOutlet weak var countLabel: UILabel! + + @IBOutlet weak var remainingLabel: UILabel! + + + + override func awakeFromNib() { + super.awakeFromNib() + expiredLabel.text = "Expired".localized + + expiredLabel.isHidden = true + + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + +} diff --git a/Fableon/Class/Store/V/FARewardCoinsCell.xib b/Fableon/Class/Store/V/FARewardCoinsCell.xib new file mode 100644 index 0000000..87e8738 --- /dev/null +++ b/Fableon/Class/Store/V/FARewardCoinsCell.xib @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Fableon/Class/Store/V/FAWalletCell.swift b/Fableon/Class/Store/V/FAWalletCell.swift new file mode 100644 index 0000000..3a63e69 --- /dev/null +++ b/Fableon/Class/Store/V/FAWalletCell.swift @@ -0,0 +1,33 @@ +// +// FAWalletCell.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/22. +// + +import UIKit + +class FAWalletCell: FATableViewCell { + + var item: FAMeItemModel? { + didSet { + titleLabel.text = item?.name + } + } + + + @IBOutlet weak var titleLabel: UILabel! + + + override func awakeFromNib() { + super.awakeFromNib() + // Initialization code + } + + override func setSelected(_ selected: Bool, animated: Bool) { + super.setSelected(selected, animated: animated) + + // Configure the view for the selected state + } + +} diff --git a/Fableon/Class/Store/V/FAWalletCell.xib b/Fableon/Class/Store/V/FAWalletCell.xib new file mode 100644 index 0000000..da778a3 --- /dev/null +++ b/Fableon/Class/Store/V/FAWalletCell.xib @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Fableon/Class/Store/V/FAWalletHeaderView.swift b/Fableon/Class/Store/V/FAWalletHeaderView.swift new file mode 100644 index 0000000..f36d299 --- /dev/null +++ b/Fableon/Class/Store/V/FAWalletHeaderView.swift @@ -0,0 +1,158 @@ +// +// FAWalletHeaderView.swift +// Fableon +// +// Created by 长沙鸿瑶 on 2025/10/22. +// + +import UIKit + +class FAWalletHeaderView: UIView { + + var userInfo: FAUserInfo? { + didSet { + coinsView.setNeedsUpdateConfiguration() + bonusView.setNeedsUpdateConfiguration() + } + } + + private lazy var contentView: UIView = { + let view = UIView() + view.backgroundColor = ._5_CA_8_FF_0_2 + view.layer.cornerRadius = 12 + view.layer.masksToBounds = true + return view + }() + + private lazy var storeButton: UIButton = { + let button = FAGradientButton(type: .custom, primaryAction: UIAction(handler: { [weak self] _ in + guard let self = self else { return } + let vc = FAStoreViewController() + self.viewController?.navigationController?.pushViewController(vc, animated: true) + })) + button.layer.cornerRadius = 24 + button.layer.masksToBounds = true + button.fa_colors = [UIColor.BEDFFF.cgColor, UIColor._52_A_2_F_1.cgColor] + button.fa_locations = [0, 1] + button.fa_startPoint = .init(x: 0, y: 0.5) + button.fa_endPoint = .init(x: 1, y: 0.5) + button.setTitle("Store".localized, for: .normal) + button.setTitleColor(._000000, for: .normal) + button.titleLabel?.font = .font(ofSize: 18, weight: .bold) + return button + }() + + private lazy var lineView: UIView = { + let view = UIView() + view.backgroundColor = .FFFFFF.withAlphaComponent(0.1) + return view + }() + + private lazy var coinsView: UIButton = { + var config = UIButton.Configuration.plain() + config.image = UIImage(named: "coins_icon_02") + config.imagePadding = 11 + config.attributedTitle = AttributedString("Coins".localized, attributes: AttributeContainer([ + .font : UIFont.font(ofSize: 10, weight: .bold), + .foregroundColor : UIColor.F_7_F_497 + ])) + + let button = UIButton(configuration: config) + button.isUserInteractionEnabled = false + button.configurationUpdateHandler = { [weak self] button in + guard let self = self else { return } + + button.configuration?.attributedSubtitle = AttributedString("\(self.userInfo?.coin_left_total ?? 0)", attributes: AttributeContainer([ + .font : UIFont.font(ofSize: 14, weight: .bold), + .foregroundColor : UIColor.FFFFFF + ])) + } + + return button + }() + + private lazy var bonusView: UIButton = { + var config = UIButton.Configuration.plain() + config.image = UIImage(named: "coins_icon_02") + config.imagePadding = 11 + config.imagePlacement = .trailing + config.titleAlignment = .leading + config.attributedTitle = AttributedString("Bonus".localized, attributes: AttributeContainer([ + .font : UIFont.font(ofSize: 10, weight: .bold), + .foregroundColor : UIColor.F_7_F_497 + ])) + + let button = UIButton(configuration: config) + button.isUserInteractionEnabled = false + button.configurationUpdateHandler = { [weak self] button in + guard let self = self else { return } + + button.configuration?.attributedSubtitle = AttributedString("\(self.userInfo?.send_coin_left_total ?? 0)", attributes: AttributeContainer([ + .font : UIFont.font(ofSize: 14, weight: .bold), + .foregroundColor : UIColor.FFFFFF + ])) + } + + return button + }() + + + + + + override init(frame: CGRect) { + super.init(frame: frame) + + fa_setupLayout() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} + +extension FAWalletHeaderView { + + private func fa_setupLayout() { + addSubview(contentView) + contentView.addSubview(storeButton) + contentView.addSubview(lineView) + contentView.addSubview(coinsView) + contentView.addSubview(bonusView) + + contentView.snp.makeConstraints { make in + make.left.equalToSuperview().offset(16) + make.centerX.equalToSuperview() + make.top.equalToSuperview().offset(25) + make.height.equalTo(150) + } + + storeButton.snp.makeConstraints { make in + make.left.equalToSuperview().offset(16) + make.centerX.equalToSuperview() + make.bottom.equalToSuperview().offset(-14) + make.height.equalTo(48) + } + + lineView.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.equalToSuperview().offset(33) + make.width.equalTo(1) + make.height.equalTo(30) + } + + coinsView.snp.makeConstraints { make in + make.left.equalToSuperview() + make.right.equalTo(lineView.snp.left) + make.centerY.equalTo(lineView) + } + + bonusView.snp.makeConstraints { make in + make.left.equalTo(lineView.snp.right) + make.right.equalToSuperview() + make.centerY.equalTo(lineView) + } + } + +} diff --git a/Fableon/Libs/FALogin/FAUserInfo.swift b/Fableon/Libs/FALogin/FAUserInfo.swift index 74cea37..e9d7601 100644 --- a/Fableon/Libs/FALogin/FAUserInfo.swift +++ b/Fableon/Libs/FALogin/FAUserInfo.swift @@ -15,6 +15,10 @@ class FAUserInfo: NSObject, SmartCodable, NSSecureCoding { var is_tourist: Bool? var family_name: String? var avator: String? + var coin_left_total: Int? + var send_coin_left_total: Int? + var is_vip: Bool? + var vip_end_time: TimeInterval? func getNickName() -> String { if let name = family_name, !name.isEmpty { @@ -24,6 +28,10 @@ class FAUserInfo: NSObject, SmartCodable, NSSecureCoding { } } + var totalCoins: Int { + return (coin_left_total ?? 0) + (send_coin_left_total ?? 0) + } + required override init() { } static var supportsSecureCoding: Bool { @@ -36,6 +44,10 @@ class FAUserInfo: NSObject, SmartCodable, NSSecureCoding { coder.encode(is_tourist, forKey: "is_tourist") coder.encode(avator, forKey: "avator") coder.encode(family_name, forKey: "family_name") + coder.encode(coin_left_total, forKey: "coin_left_total") + coder.encode(send_coin_left_total, forKey: "send_coin_left_total") + coder.encode(is_vip, forKey: "is_vip") + coder.encode(vip_end_time, forKey: "vip_end_time") } required init?(coder: NSCoder) { @@ -45,5 +57,9 @@ class FAUserInfo: NSObject, SmartCodable, NSSecureCoding { is_tourist = coder.decodeObject(of: NSNumber.self, forKey: "is_tourist")?.boolValue avator = coder.decodeObject(of: NSString.self, forKey: "avator") as? String family_name = coder.decodeObject(of: NSString.self, forKey: "family_name") as? String + coin_left_total = coder.decodeObject(of: NSNumber.self, forKey: "coin_left_total")?.intValue + send_coin_left_total = coder.decodeObject(of: NSNumber.self, forKey: "send_coin_left_total")?.intValue + is_vip = coder.decodeObject(of: NSNumber.self, forKey: "is_vip")?.boolValue + vip_end_time = coder.decodeObject(of: NSNumber.self, forKey: "vip_end_time")?.doubleValue } } diff --git a/Fableon/Source/Assets.xcassets/color/#105C91.colorset/Contents.json b/Fableon/Source/Assets.xcassets/color/#105C91.colorset/Contents.json new file mode 100644 index 0000000..480524d --- /dev/null +++ b/Fableon/Source/Assets.xcassets/color/#105C91.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x91", + "green" : "0x5C", + "red" : "0x10" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/color/#1680FB.colorset/Contents.json b/Fableon/Source/Assets.xcassets/color/#1680FB.colorset/Contents.json new file mode 100644 index 0000000..520243f --- /dev/null +++ b/Fableon/Source/Assets.xcassets/color/#1680FB.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFB", + "green" : "0x80", + "red" : "0x16" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/color/#3A271E.colorset/Contents.json b/Fableon/Source/Assets.xcassets/color/#3A271E.colorset/Contents.json new file mode 100644 index 0000000..28f7057 --- /dev/null +++ b/Fableon/Source/Assets.xcassets/color/#3A271E.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x1E", + "green" : "0x27", + "red" : "0x3A" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/color/#74BBFF.colorset/Contents.json b/Fableon/Source/Assets.xcassets/color/#74BBFF.colorset/Contents.json new file mode 100644 index 0000000..c74c7bd --- /dev/null +++ b/Fableon/Source/Assets.xcassets/color/#74BBFF.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xBB", + "red" : "0x74" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/color/#79A7DB.colorset/Contents.json b/Fableon/Source/Assets.xcassets/color/#79A7DB.colorset/Contents.json new file mode 100644 index 0000000..ed77228 --- /dev/null +++ b/Fableon/Source/Assets.xcassets/color/#79A7DB.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xDB", + "green" : "0xA7", + "red" : "0x79" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/color/#7FDBF5.colorset/Contents.json b/Fableon/Source/Assets.xcassets/color/#7FDBF5.colorset/Contents.json new file mode 100644 index 0000000..f9ff760 --- /dev/null +++ b/Fableon/Source/Assets.xcassets/color/#7FDBF5.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF5", + "green" : "0xDB", + "red" : "0x7F" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/color/#C3FAFF.colorset/Contents.json b/Fableon/Source/Assets.xcassets/color/#C3FAFF.colorset/Contents.json new file mode 100644 index 0000000..f96f0a8 --- /dev/null +++ b/Fableon/Source/Assets.xcassets/color/#C3FAFF.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xFA", + "red" : "0xC3" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/color/#F7F497.colorset/Contents.json b/Fableon/Source/Assets.xcassets/color/#F7F497.colorset/Contents.json new file mode 100644 index 0000000..0446adf --- /dev/null +++ b/Fableon/Source/Assets.xcassets/color/#F7F497.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x97", + "green" : "0xF4", + "red" : "0xF7" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/color/#FFFFFF_0.8.colorset/Contents.json b/Fableon/Source/Assets.xcassets/color/#FFFFFF_0.8.colorset/Contents.json new file mode 100644 index 0000000..ead18a8 --- /dev/null +++ b/Fableon/Source/Assets.xcassets/color/#FFFFFF_0.8.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "0.800", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/image/Frame 2085663258.imageset/Contents.json b/Fableon/Source/Assets.xcassets/image/Frame 2085663258.imageset/Contents.json new file mode 100644 index 0000000..1a2967a --- /dev/null +++ b/Fableon/Source/Assets.xcassets/image/Frame 2085663258.imageset/Contents.json @@ -0,0 +1,25 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 2085663258@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 2085663258@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "original" + } +} diff --git a/Fableon/Source/Assets.xcassets/image/Frame 2085663258.imageset/Frame 2085663258@2x.png b/Fableon/Source/Assets.xcassets/image/Frame 2085663258.imageset/Frame 2085663258@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b92fdb4a09d5c48c92a08247867545e33ed06073 GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8Nb`XMsm#F$05`DhM-r2B~}i3NjW4 zxjQkeJ16rJ$YDu$^mSxl*x1kgCy^B>H_y|>F{Fa=?aYsXhYUoH?XUWy@0Z}-z$?+n zyGHl`+XIzNjaH1QOg9$XWiacAU-z+x(a`_%m7Ch$zIHFu%rmWtJu^4H z>D7y###zV3zVgg_qoxUt1-75--be6xoS*R2H{+;Ld&9xbgF3l^BFP#DLUkie-+hvD zT6e*CQ$j8TRjF4fRL*d`uQo05&1WAwT_IuJ8A;36$SDe(vC~~`*sAXRaguK0=lU%X z?w#fLC$OBH7GcS_y~$2`U0!dC3wPP?jZRTs*_qATn4ed<@w~ZXG5?kW=j&@qHARnO z?h5`lT{HCs-w(k>8mBlw! ze6cD;*-ujCa;1wTg}hk$(~>N_I7Y>cftbB)myJ$*)?gFki74d zuTqB>ytOlNQ(yRE>CftE6AthxU;dkWYd&Aix4d(jMl-peiEj7p6`r_MG87nd44$rj JF6*2Ung9g^-+cf8 literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/Frame 2085663258.imageset/Frame 2085663258@3x.png b/Fableon/Source/Assets.xcassets/image/Frame 2085663258.imageset/Frame 2085663258@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c978b09a964a4b0cfdfe277fd4b860661531fc81 GIT binary patch literal 669 zcmeAS@N?(olHy`uVBq!ia0vp^P9V&|1|%PcFuVX#oCO|{#S9FJ79h;%I?XTvD9BhG zwi~CVo|@ynn{eD5ZU8P4R(E>39QjgL9dw)4(QJ%L6)rF~n!xNS&O`Ym&O!o{x_K5Rbdbx560 z@P$@V>Z zfpy{XW!;Xm62z zqc?x^wDjMhq5FEYow?U|<*-YytBp~tU8hSjK60L ejO0z3dziT*^}-FeiT(nnCI(MeKbLh*2~7b1>lv>A literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/Frame 3021.imageset/Contents.json b/Fableon/Source/Assets.xcassets/image/Frame 3021.imageset/Contents.json new file mode 100644 index 0000000..8f5ca8e --- /dev/null +++ b/Fableon/Source/Assets.xcassets/image/Frame 3021.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 3021@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 3021@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/image/Frame 3021.imageset/Frame 3021@2x.png b/Fableon/Source/Assets.xcassets/image/Frame 3021.imageset/Frame 3021@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8b93ec82d0604a9e3860cd13a1115c4223000911 GIT binary patch literal 564 zcmV-40?Yl0P)K5FgpwhxwrFPt$*9y7#c@<1^R)X%7!?FHot}c2D9l^AD^nG~=9E%H+Z z$MLMPd&qvJgM`tDbB5<6rEi)KBi@>WHfTSS*!mndlr7Q6nn>y?!c$u%?SV|W8t7xYcxL%6kc15ec&1I!uVK? z-3dw-KXes#A|0=27lior$a}(T%h4U~@dhTx>U=oZJa05h-MN^SWhn*e&wMDojv`QO zXw#p_tOu_v-VR)dg`85ha0bzO+m9$B=8h^VSFETs&%6xYvD$Nb-_h)j1UoP-2=fjSW0CAW)B!!Pu=!+msaRdtdVF?%lqRXAC zaH_Hzaf37CwT~eH*Ou=87&2-Fvtq0GRrT`N7!iU#K!WW7_u4b;q0ji>F8Igd<+*D% zfCrJ#v8vnlx$|pgqv2r4%){+QHlUJOTzMD)u10p+q|bO)d-b=C?exD@2oW9Q<7Ju9 zU7sEYir;kxx{q4Abs{0Q&?#?j(b=f0+dHU=C)EXEb_zgB!L&fim_H|-0xj{LTWpv( zr~)9;=Ex}olx??S;m`#??oF5^C|(qJJM9S@Y7M(IC=Es=#qYLP;asV?xF-5I9|Px#07*qoM6N<$g10Jd>Hq)$ literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/coins_icon_01.imageset/Contents.json b/Fableon/Source/Assets.xcassets/image/coins_icon_01.imageset/Contents.json new file mode 100644 index 0000000..6974814 --- /dev/null +++ b/Fableon/Source/Assets.xcassets/image/coins_icon_01.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "金币@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "金币@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/image/coins_icon_01.imageset/金币@2x.png b/Fableon/Source/Assets.xcassets/image/coins_icon_01.imageset/金币@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b958cd97ccf8045d955af4b6f02d394799ca4492 GIT binary patch literal 7036 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 literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/coins_icon_02.imageset/Contents.json b/Fableon/Source/Assets.xcassets/image/coins_icon_02.imageset/Contents.json new file mode 100644 index 0000000..6974814 --- /dev/null +++ b/Fableon/Source/Assets.xcassets/image/coins_icon_02.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "金币@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "金币@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/image/coins_icon_02.imageset/金币@2x.png b/Fableon/Source/Assets.xcassets/image/coins_icon_02.imageset/金币@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b958cd97ccf8045d955af4b6f02d394799ca4492 GIT binary patch literal 7036 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 literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/coins_icon_03.imageset/Contents.json b/Fableon/Source/Assets.xcassets/image/coins_icon_03.imageset/Contents.json new file mode 100644 index 0000000..6974814 --- /dev/null +++ b/Fableon/Source/Assets.xcassets/image/coins_icon_03.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "金币@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "金币@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/image/coins_icon_03.imageset/金币@2x.png b/Fableon/Source/Assets.xcassets/image/coins_icon_03.imageset/金币@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..74438431560cbf6e761d3116aa7466c914ae4e3a GIT binary patch literal 2238 zcmV;v2toIWP)$?tS;Y8P9k;mXaFlv3aKD0p(@N|eD(cP>s?-th(|N&kx;n%)afftM~fJY`Y>_f`!M5W6l6v~Iw9+lo&R&sr=8Ba1HCxI-na%cvcklk~ckkSL zw~OQMS@9h^{!$}lk3D~m{*0Am(q=ldyy}ow(;#EHdUc)m&hq|8hVe*nB+>GxKv~@k!6`G_U4&@U^9Zc_ zkPH)mOv53eor z!0v;8$?sr<3K2c=d&u~wipNu2^#1!l-!zfj1fYC;{l=Z)&I@*+jFFQJq^&|pjDY(p z=q)kCqzvsCl_7*%t?ls5y^jFVVT+y`c+n@Xv#@}M|<{#7|H459J^5kW~R1Xkohwv5=<1}RT z7|d`#jQ$?v)l_5Qf%gEV3YHTHQs8z1s`nuZh!~wp!AiuS&0dLQBp>{86WI)-v2p#c zCVN<2QT~t_xeX>Q3V|Le8tkl{i$1jfE%05hKqN*XTpp;jSd_}EdZBP11(~7x5NW97 zoC>TGAFap*Dy52|<*Sjr)=cBn!)8_0Et)JTHK zvwsg*;yTPAl{j>R-rXb)jZpP&L26TJk467`VMopb`DG*uLHHJY6WObA@K`$q7treJ z%Dp*25=!X+3Cr0;jHBMDS{|Uez~|SXXv$1v@->7%ItW3;v9gp^HcVg<@I*gk>=-$T zP!C6tO$&aNsQ%h1vXghxQ*3aoUJ00$xSr;kPLD+K1x zg@48j2wwn^efwc1gXGX*IlX5#c({ca8w3~mP)dlsCb5}C!4wYD=EV5HT(5;I?#}_X z4@9r<@(Q>D0jhtBqK`u@tA?H&rj06?hx%4m1GTsW;Q`8UlrmJ<80Qo!y;eZ}+h7Y1 zcyc5MloJTsfFg(sJU_?W$sV3K+us4tY~jSPYTZEK=O!D)|;Der6#3qVB4e)XW1z%qX-_k|!FPjH8wHQWbm|7-a z_BNw1(F=UzG04QQym6)Pm;4&-LHi+b>t#BK0 zh=$FuM+VJNrLw1d%CpsXiZ{m9T)h0;t5r(%JRy}Cwn`})=?v82%kY#IKrdd0RL5B& zRh)WAe${JG>)d}8x62OpiN=9fP)oJ;K4^TLY8 z?=3#6_g=RJBVsW+rd*VPm4#Kc5!tRzpzCko8Db;z(1^I8D=w(B79wxjY?6Z@M08l% z`6@bk%C^i|xP9lCO57bVm-*iJo?G=~!-^w%$7NGff`UFHXxvB_X+|X{y)9Y_xNFFg z(Q!rxF(a~sdVu5r9C2a(Qd}P>-&I@p>z|C{$a?|iGTpRk*|c|dZRyf)w{axt43uFG zPO`=_V>3_NNlzS1awl>gEvS~LoTr>SI{LFEYybKNzVvZ?FF=gf-8#7EhtIBEJO7U? z9#QQ<(nXgFt~pYbB@jmh$c>jMT~LT?=lhQSV(YnvgQu^j#)0IW4*wtEgpIT84Qp$w zmoJ#sSXY5ng#j|!#6rW%1SB{_W9zAv`RCcMkx!Ihsznimv131FvxAXX7)Bpeg M07*qoM6N<$f;E9VNB{r; literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/coins_icon_03.imageset/金币@3x.png b/Fableon/Source/Assets.xcassets/image/coins_icon_03.imageset/金币@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d9407594aa47189a0a703091d032b0e89c7a56a7 GIT binary patch literal 4356 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 Som&j_C4;A{pUXO@geCwg!h7fd literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/lock_icon_01.imageset/Frame@3x.png b/Fableon/Source/Assets.xcassets/image/lock_icon_01.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..563ce90f724ac3b581d3054ee63f84c0d0ea79b8 GIT binary patch literal 473 zcmV;~0Ve*5P)P-`V5F-PjIpT`+u=y_?sUoN zEK8AON5IUrAcR_`sci(2Y3j0HJMNh)!f1FuC)$ia%_B;4V(E5tx%=A=0*xO7^; zr6H&kp%LGE<=1k^;MMgNLP8s6+E=FzHhMqiRTv!&iJSKtRJuSYh0sSe{3y2QER^G@gPw?ah9>@T4MU|88gIcA)KzuW_G3XxP z!Q^`A*`RxY2VMcmUfC#o z$<%>~|5IDUqtO+niIHa%9>~X-81G~ccKj%r94YTf-Vl#h_Mrze^Dp@X*r>{d6AuNr P00000NkvXXu0mjfkDJHH literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/lock_icon_02.imageset/Contents.json b/Fableon/Source/Assets.xcassets/image/lock_icon_02.imageset/Contents.json new file mode 100644 index 0000000..975dc3f --- /dev/null +++ b/Fableon/Source/Assets.xcassets/image/lock_icon_02.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame 2958@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 2958@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/image/lock_icon_02.imageset/Frame 2958@2x.png b/Fableon/Source/Assets.xcassets/image/lock_icon_02.imageset/Frame 2958@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..623e85cf4f363c0842a82178f61346e7e3fd3716 GIT binary patch literal 1004 zcmVH^95>f=>XPfMk~);s`kbV&^IzaZV7eVC%pVZ0B!B zt}=?T-7`Idap|ja$r@=!`lZqIboUUIl$4Z|EG`ua!1nfb-0%1IDwRq+7z_-yCO_20 zuY>)ID2kGHyPc6|yb5Na5O|2c@tjrCm6esIPvJH4#OCJa2{zyHGlFUcJ>g(=b(QY! z?k>m!>TfuX+2>dQzd2Y@9+7|{wEgSX^QUMM3-HMkP82*)#?V9 z@v#X_?Qd;uosu%DZy4S95I28RD9%vUyt=wdr`3fxen|YV%y>B-NbBb2<|`?oCU|#u z*E~Kx{w@?}yNa44=z&=%2Y7 zQHRMoASE=v;b-41y5g}!>oe{C=@qH0TsbKT^!%XsQil@K^vXIHQtc|>UNmH%{q^$=+-KuauF|r7nxG< zvQr9Pb|UfsM>pU|kP8^;_s9cI&Vxln!<7^+W$W_tvO|_wM?BaS#3mtGM8g$>2mIM3 zB4Q=@1-~~K91Mi$KM>s}A>uCmg5UcZbP+w-kOut3qcp^-`KFH4pPrufNr;VEQkldn z@qvWcm?alCjU9qB3_Qb87T+Sb#W!up0<=??*0B*Rz6b+xEd=r=1>+82-i~tfCdH7D zATzBgVu#=u3vN*WLI_T#i5-!LVpH;rcfokOXM%H&$ur&s!*t9&4V0W~i+9120J>JN zeHz{c^UQ4Cb9Z)jR3ekp2+^hI&LSe~@b(3B)&M!9nYNqLtQfRxY_W(CW{DGIC$mn< z)2xO(<0axT0nYWtaNa)^o%cM2a)O@Vy*o3Z1T(yx;U^VbQV2b#fRs_oWv3MEoAEqv zh>1oKn?Z}Ge^x#*gF)&PLBMbPAA^`{W{95W3L7TBy3vdTPg#D8sVjb}_Ty#g$j<6vZg zb#CeQ_BMs+i+t^~p#boj%zPPRLYAm3J!JPUilX7j4O3%C5jY&YR)g2oS-2Ai5=zyZFk*4Ptf)RloQb2AUy%?32JsoV49wwvtw%kD=?w& z(Lt?{orL7g^K<$>DKdDRIQ}z!^JeDv02qd07=~dOhG8hB0g72)Uyp~wVW-h(Y~9`6 z(YB4d+rBu%m!lV!9kp7m* zC3Lsj-9vHT!{1svEhPBov$L~Lpac~{Z*Fczd7d9qcmQ79;^N}AhT7ePis|)wJ2y8s zKLUtMMD*Esj#p4IEvOJ5D(Lop2H~L3ezUT&;?B>{e?mo67CNXV9q0x4rL|HW^-r4JK}YkreC1~DiNAuGTqWJqS5mL@1LHYCNKe%3gTuD z1&>D@mSN0Zt0HDsA~e?KU$}`%iZc|M1fD8mz;N^)-+wUTkO9`}H4sL;F{HQ*^x7}(g@p!iMaYL}dA70;D{ z5TZ5u`uaMClG=>1^#hm41a-%$msnCv4XJ3Y78M#}=Uz!sA8+|SFyniMNlEcb5JXI9 zpA|$!Wq2F!Lm;SOE!t1%AcYqYLb65|UKFKqoFU^eK0Qo|%EqLEtcVGX7qwMV^bG=o zKju-VFVL}UGLJMI+3lV&V#ap~~$IRnZ26n^WN?6E( z3H{)qW3qS!2L=C#69wVM#UTJ=<_0wr%tFR4bd5!RAc)wkjUk1Lnu|G0ne&?18pB?%cL)496!Psjk2I!Y zQLEJokyd8-qdo@))D9}4zyorZPGUr-S#CNO_&p+QHCn6CF3Y&qfCueqEYBR%m`)+UqBh^gvPKjbAyH*jRcgTPG}CV zbV$GTwAh@X5bA`cQ9zgx$www8MPrPPVMg#XOz3f7L$(7mg1Pj}pTUjB7#;g3xTeB~ zo*0y&vN6Ow_+XkjyMN{^)uA=(=+J1~Q^Y2budc4tP7G^K??~()lVl+jYA!D?L#<-N zg7!T6e!>^Wx(~|^z_RZsuzHI_T{|Diw0SW;N$(zmEx?^;7M}?sJSUdYGu~*P4r!%P4G002ovPDHLkV1j(Dai;(P literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/time icon.imageset/Contents.json b/Fableon/Source/Assets.xcassets/image/time icon.imageset/Contents.json new file mode 100644 index 0000000..6efec3a --- /dev/null +++ b/Fableon/Source/Assets.xcassets/image/time icon.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "time icon@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "time icon@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/image/time icon.imageset/time icon@2x.png b/Fableon/Source/Assets.xcassets/image/time icon.imageset/time icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..db82f2d0a550718ef8e775aa9c964c69cec57b6f GIT binary patch literal 770 zcmV+d1O5DoP)w0!H-X>EWNlpT~EbRIA< zEyL}1?%bg`%nU^R61abJ&v)+mRVaYp*X79+bxx~Fp`tY^=0G8Y#)z}qQVBPmni}WH zP+6NNeO;MOaVdha21tJ8x@cz+EfIXV({)YdsbSe}4fq>sg^@GEm}9bERT@WJSL`}O zg!cJ+732~$f9Muw6fOta2s=LCR|6E_^PN5e$63M!n-6o_=VH16Ph@afwm||%w5Mr4nddlY;28*NDipujWmUr5 zA=9A|PUh1+b%STZ28H}E`2$Z(^g$M6zQ)U8X#O3%5rQ4NIlv1+az;kUej!-tyfil4 z;yaR%hDgT*2J}H#bm?Iep^XrEdQXBQ@7slJhr?%>ON^jO5rIUA8=+=0oSHGT`$Z%c zp`)!*F;k!1Qp#n~*lRf{EnsI4k)3H)BHdAeRn z@gsRp=9If_YEkpM?jvq0<5wb%7 literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/time icon.imageset/time icon@3x.png b/Fableon/Source/Assets.xcassets/image/time icon.imageset/time icon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e255409c0e2b43a2e2a6707ae73e157f8a03d04d GIT binary patch literal 1084 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 JyyBbS{{h3Pa~1#q literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/vip_image_01.imageset/Frame@3x.png b/Fableon/Source/Assets.xcassets/image/vip_image_01.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..beeb4760dbb7ca9d35f3ee077523c90b8eeb300e GIT binary patch literal 42853 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 literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/vip_image_02.imageset/Contents.json b/Fableon/Source/Assets.xcassets/image/vip_image_02.imageset/Contents.json new file mode 100644 index 0000000..5c4d3b1 --- /dev/null +++ b/Fableon/Source/Assets.xcassets/image/vip_image_02.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/image/vip_image_02.imageset/Frame@2x.png b/Fableon/Source/Assets.xcassets/image/vip_image_02.imageset/Frame@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e224a6546512052aef11c85595506f58d7e1f2cd GIT binary patch literal 44584 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 BNOu4L literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/vip_image_02.imageset/Frame@3x.png b/Fableon/Source/Assets.xcassets/image/vip_image_02.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..23b34ff6ecbb50c089671f601f3a7095a0f7d773 GIT binary patch literal 88406 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 z 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

^G9~!L&_a$4SK|Y; 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 LNkvXXu0mjfT7-VW literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/皇冠1.imageset/皇冠1@3x.png b/Fableon/Source/Assets.xcassets/image/皇冠1.imageset/皇冠1@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..03a7c9915588206a1735375759506be7c7d7dce9 GIT binary patch literal 2612 zcmZ`*c{tRK6aU)9uIqKgT1TW+n>!eBrI}di9&K@ zX(^&|n!d42^ z$2by`0iVo&ncm^L7pYMaQeY$+I4?$Sx83(fzBNwt7hQF{g@vY8qx#<_>3S4LdU*?F zV+7dx2}3bX!+PodZRs>#L4ePxY9&RwAMC|yrud=gGFBN4 zPZgxu2ME%{{2BleKV~NG2i#?RFBHUIcv4xG`ZzGHCF2@>^HiGySoWg5TUYz_DtB!Y zJo(`@S0P0;{kvrf=C>{?9G&?XNTxI4Qf!8f+(1QXBuT_<4vA+Xm6jKFEEd=?v(>_Y zE8;Wg)cf&acQ2~t%(pU*aB-qkDDgs0%J`K@PDFSB+v1$zzlp*~f)LaWFTD|NHxl-g z_zecE3Dp|fH~nOCX~PTJrIau>8d_xv-d|zr9ek-c0?*cmdN*v5xieQ*I`d9cbr8=k zH(Igx6$`Rm69OND)E^%SIU-V%RBrP`*U;4@5@_#V#7xYPCN{1=DT@A0^#k=WW>b8 zF4ZVLX76fheNoSW*|o6-C}GH^xo7PLnYbuB4KMO#)JI7RE5w~oY6+jR0r?y8LltLg zPx;nI7gjWvd4ZisKWhxttX5qx0wx>;44MtmaQ{o=8ck80oV0z=Q7SS9@TEfal@*!t zAH5eO5TOt>+ zIb6&)^I%=ZdsZ?v(R_oZCms(+WN2#qMQfe1iYiC~F>Z(R8VTkr-$fM~@3fE``^MD$ z>H|=x&4wQU*{eBK_jvQ$;#Y_-+2D!!TS+eyKhrpiT5ceRz5N||ZmGR@y99i)_=P22 z=DRN-J1jyHWqz+PEe_16c@(B=a2he0D&eE??3x+J{pr%`a&uVbj_=Oq?x0yvOwTM_ z$6RuAuys5Y2;aAC@8T)nIzQ_!1pE7iR0qRyGWX@i3}tCiD@9LsPU|C;4FSTAlO%1c zWQ4T?^)BAQM~k}f%I@a3f@E>&vD!$pf~gzA(Bt1T?T&m$GLW5L03QgJ!kZaQc}?`q zk41|X5gHjK$Eh(Pc(#qYfV}2*TU@&Dz;BY^U2v$&*Z>!&SQ>jinWlSa!=yiIotVp? z{bynPVGZF%3!`la3C*++7WmM{VW`xnTuFss;5{6S1it|eBgtabl2M-*-}~A4)hoR& zgp^(O61#LXsQ>k^;IoJN2?22(S32{-Nm_e4xBb8Bq?J@J^kYk$_>aNq6hAB%ju9^S zVLqd#ta+xdIR#IlYHL0i^HH2F_E%l7)HPgnhp3xdh{OSsC*?L*SZ6++@blh?0KDbMu*$=Fu}nX?0zY>fMA@&qu9 z!bMDf_q-A5%<~uENkJ90O@Vcf^>$Koqs;~-+p_=`kl9#ULJ1$|;`6Oj8 zfMXo(@Q13u5V|14h=Evh&gWDy?n_gaf7Mp4IDf9Gn5tUK&c^#Tam1g|%6O-C-#hja z6tE#B(X?1@ClpXAdhQld>a~KzpY|CdKy6FCP9yQOcVj6`yZ)0w>$s< literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/皇冠2.imageset/Contents.json b/Fableon/Source/Assets.xcassets/image/皇冠2.imageset/Contents.json new file mode 100644 index 0000000..fdd1e55 --- /dev/null +++ b/Fableon/Source/Assets.xcassets/image/皇冠2.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "皇冠2@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "皇冠2@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/image/皇冠2.imageset/皇冠2@2x.png b/Fableon/Source/Assets.xcassets/image/皇冠2.imageset/皇冠2@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4e792248869b396898756d39057e688b0eacbc0a GIT binary patch literal 2082 zcmV+-2;KLIP)*u#F8 z!+ApOj4ojf=oE-K1MY$%6${ow$B0USP6V8hMqdjW=m=4TgHjP>ggDtN@!`4{m6S9&SP2yx~>H@u&}r`!QSad_GSqRP%sGG&RjS* z50ddpt5`ZUpfgWZZmIW{)+|EkEdq25BQXA?l-{wH*JnTzHW(A25v8J957us=kZ#8) zwXbmtmWg3p0he5r5SY@HPVvhCMc_X{Z946D4zu7XkoA7J^eIeu98SQFscmJbv(zGt z2%IHyju;+RT7?w{)7Ij88Z@9zR8vn*hy+-v10__8wJMGN_m);)0R&YsBuflfffBh3 zJ$oz7I@V0n#j3?8mzH0lm&$-71dhGO;a##g!?O!W!b@f1B|T5KOfMYawAW= z?WD>=KzW|Ju$a3>h|$8b^A|acl~!TrUmr~khx(f^Xi5Gn4UaTy&s_@cCi#Np=nBg! z?i$2c0ocojv{L7Fn6(b5vR184YU@F6gxW?9YUDh6R1kDwC_=|G>eLy*ZclK=rT>%E0tjT-`AiD6)9GvMD6M_;pEZ7aH8)p ze_W-wvkNc&d<9Q`e+deZo?^9Q`RCo9Onlf2so^uwf8uDJph!>m0sj2?p}~e@66m*! z#xzJI5$RS96bvjTmbO}R)r$9EcyIA@~CG{BqTH)a5$3T?CN4?N@_z*}2yI3JB zKX3GlN=col1IIsgwNMOB=u6%B?1*$x`4+dV6srq#L+P_>ctk7hJMu}xDfx|;PEh*d z)G;{80#_|)tx7JfoML66McV39QPj67{JmWlH& zhU2{-9IX2t^VH(*F6e?aZ*H_2wA$cP_eI@)U35F%;A61}&`8TERvSdM9Z`$L-MXcX zf$8Bdj{}#xR{)a*PqA8^Y8_9g1TnY2X!nME8wnc#$b|&+k`y2BQqG*n>jlf~nTpojv4Q2GFKYaUj{Tni? z&OLhK{En79^yMjDap4Dq$C`H$Y|pH_G>*N1>aIfAri-wstP%1QyalQ2r1K=&fJ-cr zroDzKL_xt)BWLQK+hkV#>yzjFF)v-2ptUXn3x|j6k0C5<1>GFII6Tb_VaL2h`BV)j z)Fif$s5nW2qdVYxL1e!Cf?Pytbu^|}=f4@Odv4>!7Ce6T2k#kRiR)I8)fNyUP_VC# zUQEvVtVrQ*mY7c^G;rvF?0>3KaZ9J(ut0@fEA*jmprvkZ3H#^*v%>Mqsbm&c7$x={ za5sv6dxwv>j|aWr|FZLsWviE<81O>)R9x1{3<|omI>iJ<3-w%OxC(KfE$BssL}igs z`q-l=U1sAYdbJ2~$vI34(+uX#Z@V1H;v3={g93sY*VQUa zFwZSeYER-I1rJC&xLxj_onS^l4uty-R_Hw{b}?!8P9v=1NEl#e%T`?G-s0*Ud&Mgt z5sdI>PoH!>hWYBFCmZ7avt*B>wf)38Q3mDNjBl3G>?Diyjlb5%d>V1wVl9VdL zl4wF~3#Ml?q`6I!tw7i3;7N$&MKMtzs?b z#waxclWzf>d@`WJB66Z4PG&&izSCiPW6lT#B#k%q@*=W#P{YcIM|bp} z1{XMB!)<>E0@_SuMMc`tVUj_#x2R1>L!h8oqDDthB+{0O`0RVNwB@0a$PZKSK-E|r zI71K+K_V|I1|CeQpz@`*+93#tX$=fo3oM6)n3$NDn3$NDn0JBy0F^EWf2U4F;Q#;t M07*qoM6N<$f^=!sd;kCd literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/皇冠2.imageset/皇冠2@3x.png b/Fableon/Source/Assets.xcassets/image/皇冠2.imageset/皇冠2@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..519523de007c47a25dc17f766eae0a57494c85b1 GIT binary patch literal 3063 zcmVAaDhmD-f>$as}uWsNYuxKWqWn z4+FSWR;^VsuCCF7QsQC)%5-l(J#%mv&NbDcZ zM6h}f2gnuB6f1tpuz-j_2dwzA)L;V?;7i3aXo?kI5|Oy!;TuH6VKnmBWQ7$!0))}q z5REDyG`B!gtoRWq4HT#O5SWvFJt0)cHMwr&tuZ{R5z3BwKbz!< z08yL9d+3&v`SK)#KH^hQDu84)t*ThPhpwSt7ia2LsgRns?kJXZ0WdFVanmrD9R3 zGbl-n*tC(f^+`}Ajj}DTBaB1B=u-7FBF<+HWNjrqD0&*gBf5lsMu_jyTJBS1!g!%y zu9%YHt3ro?vr681f1BRTk-V#ZW{7_nI&Io-z=j%W<6JOii#89r7(}G-$uT%_{3sOo zufyGk#A7?P8f?D%9oF9b57yuO3L21G=%-C?UjqDaq&#F4{oI+)xah}xpFj4;BXIiE zr?9pC9x9KXh(B}0tNKks#+bC`OIb$Gna`p4m-B(bH-odmVBgnp?#s_1PekaKLwkBh zIefk6&ngLt119GIP-yJ^&lH2iC)KcLQTWrRPJk*n01BTRg}lfk^fN|$J~akT`zTx- z;XQgUoQ19~7xE(O(9an0d2Qa;HOF;3sVN)3*Xfh-2a!72hJMDc`RBg;tnF(yf8(Lu z>tCh3`co&4L!MyAP*!<=V?sS9Ds6k|a$OO!h4J|53wZu=efQtJ=g)+G&9S3LAZIcQ z{fxGJOx}c1eg0~X@W`Vl&&5m-1P-V?*L@_b(9dXZACom*&Hxm*fBAZT_|u`gNEB&Km-3H0{vO9B<#Jp`)EhXTLZJD(vj!FFulX=x2=h zehnS%y!Xv_;TGbVEOLrhRw6=~<#E5hD7=>Z@H(^gj>-d)3sIinKaJ2GGM^6wV`RlrrA6|DL=ir5|0 zd*RG(I~ekE?X}1lrUHQ_Lg|?InYCQ)63d`GVp%>T?hOCEN8+VokZ@srd)2%pgE-_W z+h%=0XaOi_!A(DNgU7 zviNw{46sPsse2k14@}ps+a0BZevjwv@#UdVUos;1Xex1}`wxN7wXWkRI*K0z_7eR5 z{(We45rx*RT;;{(8~m}!{V#+*8gtLTviL58t5K!m`d*t|T>gP=1GjF5w@`s@cu5{~ z>@HpWN~#wS2go`PIb*K>cx3C3BaMTacYP@qe7gt1?w`en)l&bZo1lPlsK--}D!XQT zQr>MVMOdh}vqQzY{>|SmN(qlM#lwF;jVnB^;l*9y(U;nGDl*r)@BuUVfEyGjpdRP5 zY)`^UlCV$@`}|S(X2&iFul0N5?ItLLj$M=UhW-y8KMN5Y-5TRdY5f|QNW^gXu*53m z>}f}s__&74fNT8Y|GbE0@qF3*X{7(kZuYM3*wJZ-&IWvd$f!^Ito8s5C2ocfn?$g7 z5Knl%z7I4B|MSXJ_>-}pFnG+i_8;%|3NuoM-4a6-TNgV5v zNT7|LCZm{eXdS`)2PU*&);$}+ete=)#e-h-DV!J zOL#U$1VshPvg43usn^mf6$#)$4*q_C@x=-Q{HJh zc0p)+6kDE=fDHQ*H}zI474Z^H+(bd^bNI>&mFo=k3dbA2@#S=wLxE=vR?T z0%OkJMZ`3_d1ROFJtNb!-B2SB0~Ij5UW z>Tsb_E5?eClou3dN$PqfG zv+#(~mhX{7C}>(mE(tn9d?ZGDm|sOst<@^Sid+(OjQAcA9YJF&a!Jr}hcIGykW4#y z>rNNp*eMIYclV7cbmR$~?b^e{K7!^}E3C-5Y8ktmgQF_$W)0b#WXT>p9a zcW-3ivT=nOOH8u5y3}H^SS%Kc#bU8oEEbE!VzF3~<^L#vB%*e6DVhKP002ovPDHLk FV1lwa*Qx*j literal 0 HcmV?d00001 diff --git a/Fableon/Source/Assets.xcassets/image/皇冠3.imageset/Contents.json b/Fableon/Source/Assets.xcassets/image/皇冠3.imageset/Contents.json new file mode 100644 index 0000000..e9d2fc2 --- /dev/null +++ b/Fableon/Source/Assets.xcassets/image/皇冠3.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "皇冠3@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "皇冠3@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Fableon/Source/Assets.xcassets/image/皇冠3.imageset/皇冠3@2x.png b/Fableon/Source/Assets.xcassets/image/皇冠3.imageset/皇冠3@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e5f7bee286c7a7b2fa38396585ca5eb9a1a2bc7f GIT binary patch literal 2218 zcmV;b2vzrqP)GDpFNILIZ7LuV?z+I_o%i?VYuE)|T0i6xrDw$If@(%=^xp zSp)d^`1ttv`1ttv`1ts|10-iABFXC$QK$hLG!V&|i&2pYP6$nOfq+QvD4S%V!1?z0 zKngsdVFV>Hc_uJ}Pooy6Q!EsUdm$==1_8x93)W&17`gfcctFDliu9K|DL}+%Yz4(M zgrLdm7o$=QSHKrkist4exppAet_m7LP)s&U0<_ukt=J^B1I0AV7#hgx1Ne|CaXQ7a zf%D)2p4g`O>9KxIgReEAMbINI3C^zUKmOg1;4(Cp@<6e5V%bo8`$=znsPYJXGCe+n zS8W2*Y%gV6dek&NmAo~67Tl)U`Y>nde((sTf}&_6hKLq$As=DfWZFnkGCEE0;$n}9 zfnt;i8WcjgMKQ67&OAbZ@+eiBGO zb`??TX@NO8J=Vnm9)Me*!0VNHr?1sUJGxJu0hjT1E}zZ18xf+4a-1R?)kpQiqiWIRQ&tC?TX(~r&%c4zeMdHkNrYRr!;XW;VEc!kfdZmDogN04sEaYQrR@N; zeexBsU{l$46unABb+H;%13|S7T`Rb$#fUyxNK}eumx=I9*3pcv6rKx;1Ly`pcOLxG zvK`mcP>L-(qu@Tg-whiT1g{bNDR!~kn`3k~x3(2ES$upS7N6WR&VO*I8=7zoEu?Ad zc2L2ZjhcljsOcEmwDtX>V=FHg3^57)zhzkX`C3t%%*ryTfL0ggZ(i<&D)3xTO$H5r5M$Se> zp#r?m@?yQqQ+Iy#^jG6K&4d>2T{Ff_6MFvQ_n)Nx?iP&JZF@fkmxyFDnTn#+QIv8wZ~MeeubC&{tj?f?7exSul)U|EO^R(*Hb%;O6&m zHnp{=EzPpb3sfbkKsGc=Pm(iZUG4F~IoTIV&*jT3H7sQT;s<)H-;^!_UhQ7I0Ea*m zz2LkUY_R>nr?8lOkS~y6fSihP| zpp4J;)w~0sIsMyW66x0tyE`tUaL^K+CkAJ!XK`Ijf%VdN)QDPuM7clb{nWDp$aC)M z>Ndornkb2DW$5XgDYzslribDkCkIl=+hao*rK2|OV-Im%tW>@rq-+z{G}pHt%0iK7 zmi7!^irK!@?1&tLG&n@DH`s+q%v<9loP(X1DJDuMUlS=oJ2AuA?+|t$s(s4VKgq8a zdf2kix_tLwf;u*Bx3t^ThRm@nCZ!&G`y_4b1EFA|Ao1iOn}HD=$46^fdkdV~Wv1Kx$+Ji-~9?JV$T^EWR| zV)3I7T!hRzb#p6LUOt285AVwQ&J;#Zf})HnN*d!6wr-??9VV_X(p9_l#)^C~B$BJt zuVN-&MG+m?BkHmViZZFKJ7(suU^P_9s%Ise#8iP@`bywUc$i|5XEP(%v-)jbk}}52 z3isqIDUNiUI5jF5BfsX^9#KoM%kJ+v-4Br!TrB97;Z% z4bYt?RNUYhn6mo}=Cl*4MEORC8i<35D)>;S0Cz77r0GKEnovM+Arr=6gfn(iDi96&bftgxc6Qsf48^Q}0z z%raW`-p_(AD|>H}IqjrK29Ky4L5VW9%9Bcw8`PDcghgS+aiz$dc0vuPJ3$H40brNC zV^)el*Uw5N9|dOJ33Vwbk(`={7+E|wUXr~kyYgDNK>=z=-3m&0T`6*dy1wy?uWB){ z5!0M@LY+|85lWO?r>bI^LM3&7YhoZA9=0(4v_au;y@^TGy`Z$0NXzQ9oRTsQD6AB{ sQ;?Ny7iG{u6OYK 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 Q;{X5v07*qoM6N<$f|>gKasU7T literal 0 HcmV?d00001 diff --git a/Fableon/Source/en.lproj/Localizable.strings b/Fableon/Source/en.lproj/Localizable.strings index e5ca0d2..3373d5e 100644 --- a/Fableon/Source/en.lproj/Localizable.strings +++ b/Fableon/Source/en.lproj/Localizable.strings @@ -1,15 +1,12 @@ "Ep.##" = "Ep.##"; -"network_error_01" = "The service is abnormal. Check the network."; "Error" = "Error"; "Feedback" = "Feedback"; "Collect" = "Collect"; "History" = "History"; "Search" = "Search"; "Historical search" = "Historical search"; -"empty_title_01" = "No search results"; -"empty_title_02" = "There is no data for the moment."; "About" = "About"; "Privacy Policy" = "Privacy Policy"; "User Agreement" = "User Agreement"; @@ -18,3 +15,39 @@ "Settings" = "Settings"; "Last Watch:Ep.##" = "Last Watch:Ep.##"; "Genres" = "Genres"; +"Popular" = "Popular"; +"New" = "New"; +"Coins" = "Coins"; +"Bonus" = "Bonus"; +"Unlocking costs ## coins" = "Unlocking costs ## coins"; +"video_lock_tip_text" = "Pre.locked"; +"Activated" = "Activated"; +"Not Activated" = "Not Activated"; +"Subscribe" = "Subscribe"; +"vip_expires_date" = "Expiration Time:##"; +"Store" = "Store"; +"Feedback History" = "Feedback History"; +"Feedback Details" = "Feedback Details"; +"My Wallet" = "My Wallet"; +"Consumption Records" = "Consumption Records"; +"Purchase Records" = "Purchase Records"; +"Reward Coins" = "Reward Coins"; +"Order Records" = "Order Records"; +"Coin Record" = "Coin Record"; +"VIP Record" = "VIP Record"; +"Expired" = "Expired"; + +"store_title_1" = "VIP Auto renew,cancel anytime"; + +"network_error_01" = "The service is abnormal. Check the network."; + +"buy_fail_toast_01" = "Purchase failed, please try again later!"; +"buy_fail_toast_02" = "The prequel to this series is not unlocked. Please unlock the prequel before unlocking this series"; + +"vip_tip_01" = "Unlimited access to all series"; +"vip_tip_02" = "All Dramas Free with VIP"; + +"empty_title_01" = "No search results"; +"empty_title_02" = "There is no data for the moment."; + + diff --git a/Podfile b/Podfile index eac23ec..c252699 100644 --- a/Podfile +++ b/Podfile @@ -32,6 +32,9 @@ target 'Fableon' do pod 'LYEmptyView' pod 'collection-view-layouts/TagsLayout' pod 'FDFullscreenPopGesture' + pod 'ZLPhotoBrowser' + pod 'JXPagingView/Paging' + pod 'JXSegmentedView' # swiftUI # pod 'SwiftUIPager' diff --git a/Podfile.lock b/Podfile.lock index 6fa1916..ea9665d 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -44,9 +44,11 @@ PODS: - IQKeyboardCore - IQTextView (1.0.5): - IQKeyboardToolbar/Placeholderable + - JXPagingView/Paging (2.1.3) - JXPlayer (0.1.5): - SJMediaCacheServer - SJVideoPlayer + - JXSegmentedView (1.4.1) - Kingfisher (8.5.0) - LYEmptyView (1.3.1) - Masonry (1.1.0) @@ -128,6 +130,9 @@ PODS: - YYCategories/no-arc (1.0.4) - YYModel (1.0.4) - YYText (1.0.7) + - ZLPhotoBrowser (4.7.3): + - ZLPhotoBrowser/Core (= 4.7.3) + - ZLPhotoBrowser/Core (4.7.3) DEPENDENCIES: - Alamofire @@ -136,7 +141,9 @@ DEPENDENCIES: - FSPagerView - HWPanModal - IQKeyboardManagerSwift + - JXPagingView/Paging - JXPlayer (~> 0.1.5) + - JXSegmentedView - Kingfisher - LYEmptyView - MJRefresh @@ -146,8 +153,13 @@ DEPENDENCIES: - Toast - YYCategories - YYText + - ZLPhotoBrowser SPEC REPOS: + https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git: + - JXPagingView + - JXSegmentedView + - ZLPhotoBrowser trunk: - Alamofire - collection-view-layouts @@ -193,7 +205,9 @@ SPEC CHECKSUMS: IQKeyboardToolbarManager: c8a575e8b5fffe5873d0e75312244498a0759473 IQTextInputViewNotification: 3b9fb27a16e7ee8958cc9092cfb07a1a9e1fd559 IQTextView: ae13b4922f22e6f027f62c557d9f4f236b19d5c7 + JXPagingView: afdd2e9af09c90160dd232b970d603cc6e7ddd0e JXPlayer: 0e0cd9a2ee406ebb3051d00c760cd5fc599bf09b + JXSegmentedView: cd73555ce2134d1656db2cb383ba9c2f36fb5078 Kingfisher: ff0d31a1f07bdff6a1ebb3ba08b8e6e567b6500c LYEmptyView: b6d418cfa38b78df0cf243f9a9c25ccbdc399922 Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 @@ -209,7 +223,8 @@ SPEC CHECKSUMS: YYCategories: 6bcd4314c6661a561410dce4a793379ebd306abd YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30 YYText: 5c461d709e24d55a182d1441c41dc639a18a4849 + ZLPhotoBrowser: d5928f08485c90a0b349a3a1e804e82c83ccf193 -PODFILE CHECKSUM: f13e3a9a8d2998f8380682e57a9ed999020f6a46 +PODFILE CHECKSUM: 631a8194b3b1b6d74b60a8ba767e3a1c6a63989b COCOAPODS: 1.16.2