充值页面开发
@ -158,6 +158,20 @@
|
||||
F39855272E322A7100E2D28D /* BRBaseAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855262E322A7100E2D28D /* BRBaseAlert.swift */; };
|
||||
F39855292E322B1800E2D28D /* BRAlertWindowManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855282E322B1800E2D28D /* BRAlertWindowManager.swift */; };
|
||||
F398552B2E322C7C00E2D28D /* BRAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = F398552A2E322C7C00E2D28D /* BRAlert.swift */; };
|
||||
F398552D2E33126D00E2D28D /* BRMineCoinItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F398552C2E33126D00E2D28D /* BRMineCoinItemView.swift */; };
|
||||
F398552F2E33179800E2D28D /* BRMineVipCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F398552E2E33179800E2D28D /* BRMineVipCell.swift */; };
|
||||
F39855312E33620200E2D28D /* BRMineStoreCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855302E33620200E2D28D /* BRMineStoreCell.swift */; };
|
||||
F39855332E33629000E2D28D /* BRMineStoreItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855322E33629000E2D28D /* BRMineStoreItemView.swift */; };
|
||||
F39855372E33699900E2D28D /* BRStoreViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855362E33699900E2D28D /* BRStoreViewController.swift */; };
|
||||
F398553B2E336C5700E2D28D /* BRStoreAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = F398553A2E336C4F00E2D28D /* BRStoreAPI.swift */; };
|
||||
F398553E2E336D3000E2D28D /* BRPayDateModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F398553D2E336D3000E2D28D /* BRPayDateModel.swift */; };
|
||||
F39855402E336FD700E2D28D /* BRStoreVipView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F398553F2E336FD700E2D28D /* BRStoreVipView.swift */; };
|
||||
F39855422E3374B500E2D28D /* BRStoreVipCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855412E3374B500E2D28D /* BRStoreVipCell.swift */; };
|
||||
F39855442E33840500E2D28D /* AaHouDiHei-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F39855432E33840500E2D28D /* AaHouDiHei-Regular.ttf */; };
|
||||
F39855462E338FDA00E2D28D /* BRStoreCoinView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855452E338FDA00E2D28D /* BRStoreCoinView.swift */; };
|
||||
F39855482E33928400E2D28D /* BRStoreCoinBigCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855472E33928400E2D28D /* BRStoreCoinBigCell.swift */; };
|
||||
F398554A2E33929C00E2D28D /* BRStoreCoinCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855492E33929C00E2D28D /* BRStoreCoinCell.swift */; };
|
||||
F398554C2E3392C200E2D28D /* BRStoreCoinSmallCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F398554B2E3392C200E2D28D /* BRStoreCoinSmallCell.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
@ -327,6 +341,20 @@
|
||||
F39855262E322A7100E2D28D /* BRBaseAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRBaseAlert.swift; sourceTree = "<group>"; };
|
||||
F39855282E322B1800E2D28D /* BRAlertWindowManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRAlertWindowManager.swift; sourceTree = "<group>"; };
|
||||
F398552A2E322C7C00E2D28D /* BRAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRAlert.swift; sourceTree = "<group>"; };
|
||||
F398552C2E33126D00E2D28D /* BRMineCoinItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRMineCoinItemView.swift; sourceTree = "<group>"; };
|
||||
F398552E2E33179800E2D28D /* BRMineVipCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRMineVipCell.swift; sourceTree = "<group>"; };
|
||||
F39855302E33620200E2D28D /* BRMineStoreCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRMineStoreCell.swift; sourceTree = "<group>"; };
|
||||
F39855322E33629000E2D28D /* BRMineStoreItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRMineStoreItemView.swift; sourceTree = "<group>"; };
|
||||
F39855362E33699900E2D28D /* BRStoreViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRStoreViewController.swift; sourceTree = "<group>"; };
|
||||
F398553A2E336C4F00E2D28D /* BRStoreAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRStoreAPI.swift; sourceTree = "<group>"; };
|
||||
F398553D2E336D3000E2D28D /* BRPayDateModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRPayDateModel.swift; sourceTree = "<group>"; };
|
||||
F398553F2E336FD700E2D28D /* BRStoreVipView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRStoreVipView.swift; sourceTree = "<group>"; };
|
||||
F39855412E3374B500E2D28D /* BRStoreVipCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRStoreVipCell.swift; sourceTree = "<group>"; };
|
||||
F39855432E33840500E2D28D /* AaHouDiHei-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "AaHouDiHei-Regular.ttf"; sourceTree = "<group>"; };
|
||||
F39855452E338FDA00E2D28D /* BRStoreCoinView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRStoreCoinView.swift; sourceTree = "<group>"; };
|
||||
F39855472E33928400E2D28D /* BRStoreCoinBigCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRStoreCoinBigCell.swift; sourceTree = "<group>"; };
|
||||
F39855492E33929C00E2D28D /* BRStoreCoinCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRStoreCoinCell.swift; sourceTree = "<group>"; };
|
||||
F398554B2E3392C200E2D28D /* BRStoreCoinSmallCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRStoreCoinSmallCell.swift; sourceTree = "<group>"; };
|
||||
F70FA1F4169364C4C53534CE /* Pods-BeeReel.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeeReel.release.xcconfig"; path = "Target Support Files/Pods-BeeReel/Pods-BeeReel.release.xcconfig"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
@ -418,6 +446,10 @@
|
||||
BF02B81A2E2F8FDF00172177 /* BRMineUserInfoCell.swift */,
|
||||
BF02B8232E2FAEB500172177 /* BRAboutUsCell.swift */,
|
||||
BF02B8252E2FB36A00172177 /* BRAboutUsHeaderView.swift */,
|
||||
F398552C2E33126D00E2D28D /* BRMineCoinItemView.swift */,
|
||||
F398552E2E33179800E2D28D /* BRMineVipCell.swift */,
|
||||
F39855302E33620200E2D28D /* BRMineStoreCell.swift */,
|
||||
F39855322E33629000E2D28D /* BRMineStoreItemView.swift */,
|
||||
);
|
||||
path = View;
|
||||
sourceTree = "<group>";
|
||||
@ -556,6 +588,7 @@
|
||||
BF692AF22E0A478D00A5C2DA /* Sources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F39855432E33840500E2D28D /* AaHouDiHei-Regular.ttf */,
|
||||
BF692AE22E0A475D00A5C2DA /* Assets.xcassets */,
|
||||
BF692AE32E0A475D00A5C2DA /* Info.plist */,
|
||||
BF692AE52E0A475D00A5C2DA /* LaunchScreen.storyboard */,
|
||||
@ -592,6 +625,7 @@
|
||||
BF692AF52E0A47D400A5C2DA /* Class */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F39855342E33697400E2D28D /* Store */,
|
||||
BF02B8292E30851900172177 /* Search */,
|
||||
BF02B8102E2F83A100172177 /* Mine */,
|
||||
BF02B8052E2F612200172177 /* Favorites */,
|
||||
@ -889,6 +923,7 @@
|
||||
BF692B712E0D395300A5C2DA /* API */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F398553A2E336C4F00E2D28D /* BRStoreAPI.swift */,
|
||||
BFC676882E122FDB006659E5 /* BRVideoAPI.swift */,
|
||||
BFC676682E0E34D9006659E5 /* BRUserAPI.swift */,
|
||||
BF692B722E0D396800A5C2DA /* BRHomeAPI.swift */,
|
||||
@ -1003,6 +1038,45 @@
|
||||
path = Alert;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F39855342E33697400E2D28D /* Store */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F39855352E33697F00E2D28D /* Controller */,
|
||||
F39855382E336BFD00E2D28D /* View */,
|
||||
F398553C2E336CC100E2D28D /* Model */,
|
||||
);
|
||||
path = Store;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F39855352E33697F00E2D28D /* Controller */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F39855362E33699900E2D28D /* BRStoreViewController.swift */,
|
||||
);
|
||||
path = Controller;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F39855382E336BFD00E2D28D /* View */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F398553F2E336FD700E2D28D /* BRStoreVipView.swift */,
|
||||
F39855412E3374B500E2D28D /* BRStoreVipCell.swift */,
|
||||
F39855452E338FDA00E2D28D /* BRStoreCoinView.swift */,
|
||||
F39855492E33929C00E2D28D /* BRStoreCoinCell.swift */,
|
||||
F39855472E33928400E2D28D /* BRStoreCoinBigCell.swift */,
|
||||
F398554B2E3392C200E2D28D /* BRStoreCoinSmallCell.swift */,
|
||||
);
|
||||
path = View;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F398553C2E336CC100E2D28D /* Model */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F398553D2E336D3000E2D28D /* BRPayDateModel.swift */,
|
||||
);
|
||||
path = Model;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
@ -1066,6 +1140,7 @@
|
||||
files = (
|
||||
BF692AEE2E0A475D00A5C2DA /* Assets.xcassets in Resources */,
|
||||
BF692AF02E0A475D00A5C2DA /* LaunchScreen.storyboard in Resources */,
|
||||
F39855442E33840500E2D28D /* AaHouDiHei-Regular.ttf in Resources */,
|
||||
BF692B442E0A910E00A5C2DA /* Localizable.xcstrings in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@ -1128,6 +1203,7 @@
|
||||
BFC676A42E129D60006659E5 /* BRHomeTop10Cell.swift in Sources */,
|
||||
BF02B8262E2FB36A00172177 /* BRAboutUsHeaderView.swift in Sources */,
|
||||
BF692B3C2E0A8D0200A5C2DA /* BRNavigationController.swift in Sources */,
|
||||
F39855332E33629000E2D28D /* BRMineStoreItemView.swift in Sources */,
|
||||
BFC676B12E137D2F006659E5 /* BRPopularPicksViewController.swift in Sources */,
|
||||
BF02B7FC2E2F262F00172177 /* BRGradientView.swift in Sources */,
|
||||
BFC676692E0E34DA006659E5 /* BRUserAPI.swift in Sources */,
|
||||
@ -1138,12 +1214,15 @@
|
||||
BF02B8392E30B30400172177 /* AlignedCollectionViewFlowLayout.swift in Sources */,
|
||||
BF3A56882E30E0DD009E5CF9 /* BREmpty.swift in Sources */,
|
||||
BF3338F52E1616B200B10F76 /* BRExploreControlView.swift in Sources */,
|
||||
F398552D2E33126D00E2D28D /* BRMineCoinItemView.swift in Sources */,
|
||||
BF692B132E0A7B9000A5C2DA /* BRUserInfo.swift in Sources */,
|
||||
BF692B042E0A76D200A5C2DA /* BRLoginManager.swift in Sources */,
|
||||
BFC6769D2E129794006659E5 /* BRHomeTop10ViewController.swift in Sources */,
|
||||
BF02B80D2E2F63ED00172177 /* BRFavoritesCell.swift in Sources */,
|
||||
BF692AEB2E0A475D00A5C2DA /* AppDelegate.swift in Sources */,
|
||||
F39855372E33699900E2D28D /* BRStoreViewController.swift in Sources */,
|
||||
BF02B81B2E2F8FDF00172177 /* BRMineUserInfoCell.swift in Sources */,
|
||||
F398554C2E3392C200E2D28D /* BRStoreCoinSmallCell.swift in Sources */,
|
||||
BF02B8202E2F9B1000172177 /* BRWebViewController.swift in Sources */,
|
||||
BF692B242E0A825B00A5C2DA /* BRCryptorService.swift in Sources */,
|
||||
BF02B8242E2FAEB500172177 /* BRAboutUsCell.swift in Sources */,
|
||||
@ -1171,6 +1250,7 @@
|
||||
BF692B782E0D3A1200A5C2DA /* BRHomeModuleItem.swift in Sources */,
|
||||
BF692B5A2E0AAADD00A5C2DA /* BRPlayerListCell.swift in Sources */,
|
||||
BF02B8312E30897700172177 /* BRSearchHomeView.swift in Sources */,
|
||||
F398554A2E33929C00E2D28D /* BRStoreCoinCell.swift in Sources */,
|
||||
BF3A568C2E30EBA2009E5CF9 /* BRHomePlayRecordButton.swift in Sources */,
|
||||
BF692B162E0A7CD600A5C2DA /* BRHUD.swift in Sources */,
|
||||
BF3338F72E16176900B10F76 /* BRDetailPlayerCell.swift in Sources */,
|
||||
@ -1204,6 +1284,7 @@
|
||||
BF02B7FF2E2F2F2900172177 /* BRHomeCategoriesCell.swift in Sources */,
|
||||
BF692B3A2E0A8C6000A5C2DA /* BRViewController.swift in Sources */,
|
||||
BFC676BE2E13A8EB006659E5 /* UIScrollView+BRRefresh.swift in Sources */,
|
||||
F39855312E33620200E2D28D /* BRMineStoreCell.swift in Sources */,
|
||||
BF692B182E0A7D8900A5C2DA /* BRToast.swift in Sources */,
|
||||
BF692B0E2E0A7AF300A5C2DA /* UserDefaults+BRAdd.swift in Sources */,
|
||||
BF02B8082E2F616E00172177 /* BRFavoritesViewController.swift in Sources */,
|
||||
@ -1212,6 +1293,8 @@
|
||||
BF692B1F2E0A804600A5C2DA /* BRLocalizedManager.swift in Sources */,
|
||||
F39855222E32227D00E2D28D /* BRPlayHistorysViewController.swift in Sources */,
|
||||
BF02B7E92E2E29E900172177 /* BREpisodeSelectorCell.swift in Sources */,
|
||||
F39855462E338FDA00E2D28D /* BRStoreCoinView.swift in Sources */,
|
||||
F398553B2E336C5700E2D28D /* BRStoreAPI.swift in Sources */,
|
||||
BF02B83B2E30BB4C00172177 /* BRHotSearchView.swift in Sources */,
|
||||
BF02B8332E308E4300172177 /* BRSearchRecordTagCell.swift in Sources */,
|
||||
BF692B612E0B814F00A5C2DA /* BRTabBarItemContentView.swift in Sources */,
|
||||
@ -1232,11 +1315,13 @@
|
||||
F39855202E32166300E2D28D /* BRFavoritesPageViewController.swift in Sources */,
|
||||
BF02B80F2E2F6EEA00172177 /* BRFavoritesHeaderView.swift in Sources */,
|
||||
BF692B632E0B9D4800A5C2DA /* BRTabBarItem.swift in Sources */,
|
||||
F39855402E336FD700E2D28D /* BRStoreVipView.swift in Sources */,
|
||||
BFC6768B2E123690006659E5 /* BRVideoRevolutionManager.swift in Sources */,
|
||||
BFC6768F2E125D5B006659E5 /* BRSpotlightTopMainCell.swift in Sources */,
|
||||
BF692B1C2E0A7DE800A5C2DA /* BRAppTool.swift in Sources */,
|
||||
BFC676622E0E2C8E006659E5 /* WMZBannerView.m in Sources */,
|
||||
BFC676632E0E2C8E006659E5 /* WMZBannerOverLayout.m in Sources */,
|
||||
F39855482E33928400E2D28D /* BRStoreCoinBigCell.swift in Sources */,
|
||||
BFC676642E0E2C8E006659E5 /* WMZBannerFlowLayout.m in Sources */,
|
||||
BF02B81E2E2F99D900172177 /* BRWebView.swift in Sources */,
|
||||
BFC676652E0E2C8E006659E5 /* WMZBannerControl.m in Sources */,
|
||||
@ -1256,6 +1341,7 @@
|
||||
BF0DBDD12E0D4E150035F6B4 /* BRTabBar.swift in Sources */,
|
||||
BF692B562E0AA92100A5C2DA /* BRCollectionViewCell.swift in Sources */,
|
||||
BF02B7E32E2E08BD00172177 /* BRDetailEpButton.swift in Sources */,
|
||||
F398553E2E336D3000E2D28D /* BRPayDateModel.swift in Sources */,
|
||||
BF692B072E0A771C00A5C2DA /* BRModel.swift in Sources */,
|
||||
BF02B82F2E30895700172177 /* BRSearchRecordView.swift in Sources */,
|
||||
BF692B752E0D39D000A5C2DA /* BRListModel.swift in Sources */,
|
||||
@ -1263,8 +1349,10 @@
|
||||
BFC676B92E1385FC006659E5 /* BRPopularPicksSmallCell.swift in Sources */,
|
||||
BF692B512E0AA8C600A5C2DA /* BRPlayerListViewController.swift in Sources */,
|
||||
BF02B8282E30821B00172177 /* BRSearchViewController.swift in Sources */,
|
||||
F39855422E3374B500E2D28D /* BRStoreVipCell.swift in Sources */,
|
||||
BFC676522E0D4EFD006659E5 /* BRHomeViewModel.swift in Sources */,
|
||||
BFC676A72E12AF04006659E5 /* WaterfallMutiSectionFlowLayout.swift in Sources */,
|
||||
F398552F2E33179800E2D28D /* BRMineVipCell.swift in Sources */,
|
||||
BF692B2A2E0A84F700A5C2DA /* JXUUID.m in Sources */,
|
||||
BF692B2B2E0A84F700A5C2DA /* PDKeyChain.m in Sources */,
|
||||
BF3A56852E30CA78009E5CF9 /* BRSearchResultCell.swift in Sources */,
|
||||
|
@ -107,6 +107,10 @@ extension UIColor {
|
||||
return UIColor(rgb: 0xE4FEFF, alpha: alpha)
|
||||
}
|
||||
|
||||
static func colorE4FFF2(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0xE4FFF2, alpha: alpha)
|
||||
}
|
||||
|
||||
static func colorFFFDF1(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0xFFFDF1, alpha: alpha)
|
||||
}
|
||||
@ -126,4 +130,60 @@ extension UIColor {
|
||||
static func colorC2C2C2(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0xC2C2C2, alpha: alpha)
|
||||
}
|
||||
|
||||
static func color005C10(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0x005C10, alpha: alpha)
|
||||
}
|
||||
|
||||
static func color5C4A00(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0x5C4A00, alpha: alpha)
|
||||
}
|
||||
|
||||
static func color761600(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0x761600, alpha: alpha)
|
||||
}
|
||||
|
||||
static func color430069(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0x430069, alpha: alpha)
|
||||
}
|
||||
|
||||
static func color2C042C(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0x2C042C, alpha: alpha)
|
||||
}
|
||||
|
||||
static func color868686(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0x868686, alpha: alpha)
|
||||
}
|
||||
|
||||
static func colorFFF799(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0xFFF799, alpha: alpha)
|
||||
}
|
||||
|
||||
static func colorFBDAD0(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0xFBDAD0, alpha: alpha)
|
||||
}
|
||||
|
||||
static func colorF3D3FC(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0xF3D3FC, alpha: alpha)
|
||||
}
|
||||
|
||||
static func colorB45A00(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0xB45A00, alpha: alpha)
|
||||
}
|
||||
|
||||
static func color44703E(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0x44703E, alpha: alpha)
|
||||
}
|
||||
|
||||
static func color635D1B(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0x635D1B, alpha: alpha)
|
||||
}
|
||||
|
||||
static func colorA86800(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0xA86800, alpha: alpha)
|
||||
}
|
||||
|
||||
static func colorFFB635(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0xFFB635, alpha: alpha)
|
||||
}
|
||||
}
|
||||
|
@ -21,4 +21,8 @@ extension UIFont {
|
||||
static func fontBold(ofSize: CGFloat) -> UIFont {
|
||||
return .systemFont(ofSize: ofSize, weight: .bold)
|
||||
}
|
||||
|
||||
static func aaHouDiHei(ofSize: CGFloat) -> UIFont {
|
||||
return UIFont(name: "AaHouDiHei", size: ofSize) ?? fontMedium(ofSize: ofSize)
|
||||
}
|
||||
}
|
||||
|
29
BeeReel/Base/Network/API/BRStoreAPI.swift
Normal file
@ -0,0 +1,29 @@
|
||||
//
|
||||
// BRStoreAPI.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import SmartCodable
|
||||
|
||||
class BRStoreAPI {
|
||||
enum BuyType: String, SmartCaseDefaultable {
|
||||
case coins = "coins"
|
||||
case subVip = "sub_vip"
|
||||
}
|
||||
|
||||
///获取支付模版
|
||||
static func requestPayTemplate(isLoding: Bool = false, isToast: Bool = true, completer: ((_ model: BRPayDateModel?) -> Void)?) {
|
||||
|
||||
var param = BRNetworkParameters(path: "/paySettingsV3")
|
||||
param.method = .get
|
||||
param.isToast = isToast
|
||||
param.isLoding = isLoding
|
||||
|
||||
BRNetwork.request(parameters: param) { (response: BRNetworkResponse<BRPayDateModel>) in
|
||||
completer?(response.data)
|
||||
}
|
||||
}
|
||||
}
|
@ -37,3 +37,14 @@ let kSBFeedBackListWebUrl = BRCampaignWebURL + "/pages/leave/list"
|
||||
let kSBFeedBackDetailWebUrl = BRCampaignWebURL + "/pages/leave/detail"
|
||||
///活动页面
|
||||
let kSBRewardsWebUrl = BRCampaignWebURL + "/pages/reward/theme4"
|
||||
|
||||
|
||||
/*
|
||||
官网:https://www.breeltv.com/
|
||||
协议页面:https://www.breeltv.com/xxxxx
|
||||
反馈:https://campaign.breeltv.com/pages/leave/index 黑色传{theme:theme_1}、 白色传{theme:theme_2}
|
||||
活动页:抓紧开发中......
|
||||
后台地址:https://admin-beereel.guyantv.com/
|
||||
w2a:https://w2a.breeltv.com/
|
||||
w2a联调地址:https://w2a.breeltv.com/?short_play_id=8&type=fb&id=168&pixel_id=123&adj_campaign={{campaign.name}}%20({{campaign.id}})&adj_adgroup={{adset.name}}%20({{adset.id}})&adj_creative={{ad.name}}%20({{ad.id}})
|
||||
*/
|
||||
|
@ -15,6 +15,12 @@ class BRMineViewController: BRViewController {
|
||||
[
|
||||
BRMineItem(type: .userInfo),
|
||||
],
|
||||
[
|
||||
BRMineItem(type: .vip),
|
||||
],
|
||||
[
|
||||
BRMineItem(type: .store),
|
||||
],
|
||||
[
|
||||
BRMineItem(type: .web, icon: UIImage(named: "mine_item_icon_01"), title: "Privacy Policy".localized, url: kSBPrivacyPolicyWebUrl),
|
||||
// BRMineItem(type: .helpCenter, icon: UIImage(named: "mine_item_icon_02"), title: "Help Center".localized, url: ""),
|
||||
@ -38,6 +44,8 @@ class BRMineViewController: BRViewController {
|
||||
tableView.contentInset = .init(top: 0, left: 0, bottom: UIScreen.tabbarSafeBottomMargin + 10, right: 0)
|
||||
tableView.register(BRMineCell.self, forCellReuseIdentifier: "cell")
|
||||
tableView.register(BRMineUserInfoCell.self, forCellReuseIdentifier: "userInfo")
|
||||
tableView.register(BRMineVipCell.self, forCellReuseIdentifier: "vip")
|
||||
tableView.register(BRMineStoreCell.self, forCellReuseIdentifier: "store")
|
||||
return tableView
|
||||
}()
|
||||
|
||||
@ -103,6 +111,12 @@ extension BRMineViewController: UITableViewDelegate, UITableViewDataSource {
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: "userInfo", for: indexPath) as! BRMineUserInfoCell
|
||||
cell.userInfo = BRLoginManager.manager.userInfo
|
||||
return cell
|
||||
} else if item.type == .vip {
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: "vip", for: indexPath) as! BRMineVipCell
|
||||
return cell
|
||||
} else if item.type == .store {
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: "store", for: indexPath) as! BRMineStoreCell
|
||||
return cell
|
||||
}
|
||||
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! BRMineCell
|
||||
|
@ -14,6 +14,8 @@ class BRMineItem: BRModel {
|
||||
case web
|
||||
case helpCenter
|
||||
case aboutUs
|
||||
case vip
|
||||
case store
|
||||
}
|
||||
|
||||
var type: ItemType?
|
||||
|
84
BeeReel/Class/Mine/View/BRMineCoinItemView.swift
Normal file
@ -0,0 +1,84 @@
|
||||
//
|
||||
// BRMineCoinItemView.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRMineCoinItemView: UIView {
|
||||
|
||||
var title: String? {
|
||||
didSet {
|
||||
titleLabel.text = title
|
||||
}
|
||||
}
|
||||
|
||||
var coinCount: Int? {
|
||||
didSet {
|
||||
coinLabel.text = "\(coinCount ?? 0)"
|
||||
}
|
||||
}
|
||||
|
||||
private lazy var coinLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontMedium(ofSize: 15)
|
||||
label.textColor = .color1C1C1C()
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var coinImageView: UIImageView = {
|
||||
let imageView = UIImageView(image: UIImage(named: "coins"))
|
||||
return imageView
|
||||
}()
|
||||
|
||||
private lazy var moreImageView: UIImageView = {
|
||||
let imageView = UIImageView(image: UIImage(named: "arrow_right_icon_03"))
|
||||
return imageView
|
||||
}()
|
||||
|
||||
private lazy var titleLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontRegular(ofSize: 12)
|
||||
label.textColor = .color777777()
|
||||
return label
|
||||
}()
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
|
||||
addSubview(coinLabel)
|
||||
addSubview(coinImageView)
|
||||
addSubview(moreImageView)
|
||||
addSubview(titleLabel)
|
||||
|
||||
coinLabel.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview()
|
||||
make.centerY.equalTo(coinImageView)
|
||||
}
|
||||
|
||||
coinImageView.snp.makeConstraints { make in
|
||||
make.top.equalToSuperview()
|
||||
make.left.equalTo(coinLabel.snp.right).offset(4)
|
||||
}
|
||||
|
||||
moreImageView.snp.makeConstraints { make in
|
||||
make.centerY.equalTo(coinImageView)
|
||||
make.right.equalToSuperview()
|
||||
make.left.equalTo(coinImageView.snp.right).offset(1)
|
||||
}
|
||||
|
||||
titleLabel.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview()
|
||||
make.top.equalTo(coinImageView.snp.bottom).offset(5)
|
||||
make.bottom.equalToSuperview()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
}
|
66
BeeReel/Class/Mine/View/BRMineStoreCell.swift
Normal file
@ -0,0 +1,66 @@
|
||||
//
|
||||
// BRMineStoreCell.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRMineStoreCell: BRTableViewCell {
|
||||
|
||||
|
||||
private lazy var shortView: BRMineStoreItemView = {
|
||||
let view = BRMineStoreItemView()
|
||||
view.titleLabel.text = "Store".localized
|
||||
view.subtitleLabel.text = "Unlock More".localized
|
||||
view.imageView.image = UIImage(named: "Store")
|
||||
view.addTarget(self, action: #selector(handleShortView), for: .touchUpInside)
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var rewardsView: BRMineStoreItemView = {
|
||||
let view = BRMineStoreItemView()
|
||||
view.titleLabel.text = "Rewards".localized
|
||||
view.subtitleLabel.text = "Daily Check-In".localized
|
||||
view.imageView.image = UIImage(named: "Rewards")
|
||||
view.addTarget(self, action: #selector(handleRewardsView), for: .touchUpInside)
|
||||
return view
|
||||
}()
|
||||
|
||||
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
||||
|
||||
contentView.addSubview(shortView)
|
||||
contentView.addSubview(rewardsView)
|
||||
|
||||
shortView.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview()
|
||||
make.top.bottom.equalToSuperview()
|
||||
make.height.equalTo(60)
|
||||
}
|
||||
|
||||
rewardsView.snp.makeConstraints { make in
|
||||
make.right.top.bottom.equalToSuperview()
|
||||
make.left.equalTo(shortView.snp.right).offset(11)
|
||||
make.width.equalTo(shortView.snp.width)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@MainActor required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
@objc private func handleShortView() {
|
||||
let vc = BRStoreViewController()
|
||||
self.viewController?.navigationController?.pushViewController(vc, animated: true)
|
||||
}
|
||||
|
||||
@objc private func handleRewardsView() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
62
BeeReel/Class/Mine/View/BRMineStoreItemView.swift
Normal file
@ -0,0 +1,62 @@
|
||||
//
|
||||
// BRMineStoreItemView.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRMineStoreItemView: UIControl {
|
||||
|
||||
private(set) lazy var imageView: UIImageView = {
|
||||
let imageView = UIImageView()
|
||||
return imageView
|
||||
}()
|
||||
|
||||
private(set) lazy var titleLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontMedium(ofSize: 15)
|
||||
label.textColor = .color000000()
|
||||
return label
|
||||
}()
|
||||
|
||||
private(set) lazy var subtitleLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontRegular(ofSize: 10)
|
||||
label.textColor = .color777777()
|
||||
return label
|
||||
}()
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
self.backgroundColor = .colorFFFFFF()
|
||||
layer.cornerRadius = 10
|
||||
layer.masksToBounds = true
|
||||
|
||||
addSubview(imageView)
|
||||
addSubview(titleLabel)
|
||||
addSubview(subtitleLabel)
|
||||
|
||||
imageView.snp.makeConstraints { make in
|
||||
make.centerY.equalToSuperview()
|
||||
// make.width.height.equalTo(48)
|
||||
make.left.equalToSuperview().offset(9)
|
||||
}
|
||||
|
||||
titleLabel.snp.makeConstraints { make in
|
||||
make.left.equalTo(imageView.snp.right).offset(10)
|
||||
make.top.equalToSuperview().offset(13)
|
||||
}
|
||||
|
||||
subtitleLabel.snp.makeConstraints { make in
|
||||
make.left.equalTo(titleLabel)
|
||||
make.top.equalTo(titleLabel.snp.bottom).offset(1)
|
||||
}
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
}
|
@ -16,6 +16,9 @@ class BRMineUserInfoCell: BRTableViewCell {
|
||||
nickLabel.text = userInfo?.family_name?.isEmpty != false ? "Visitor".localized : userInfo?.family_name
|
||||
|
||||
idLabel.text = "ID: \(userInfo?.customer_id ?? "")"
|
||||
|
||||
coinView.coinCount = userInfo?.coin_left_total ?? 0
|
||||
donateView.coinCount = userInfo?.send_coin_left_total ?? 0
|
||||
}
|
||||
}
|
||||
|
||||
@ -53,6 +56,20 @@ class BRMineUserInfoCell: BRTableViewCell {
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var coinView: BRMineCoinItemView = {
|
||||
let view = BRMineCoinItemView()
|
||||
view.title = "Coins".localized
|
||||
view.coinCount = 0
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var donateView: BRMineCoinItemView = {
|
||||
let view = BRMineCoinItemView()
|
||||
view.title = "Donate".localized
|
||||
view.coinCount = 0
|
||||
return view
|
||||
}()
|
||||
|
||||
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
||||
|
||||
@ -73,12 +90,15 @@ extension BRMineUserInfoCell {
|
||||
avatarBgView.addSubview(avatarImageView)
|
||||
contentView.addSubview(nickLabel)
|
||||
contentView.addSubview(idLabel)
|
||||
contentView.addSubview(coinView)
|
||||
contentView.addSubview(donateView)
|
||||
|
||||
avatarBgView.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview()
|
||||
make.top.equalToSuperview().offset(39)
|
||||
make.width.height.equalTo(68)
|
||||
make.bottom.equalToSuperview().offset(-6)
|
||||
// make.bottom.equalToSuperview().offset(-6)
|
||||
make.bottom.equalToSuperview().offset(-76)
|
||||
}
|
||||
|
||||
avatarIconImageView.snp.makeConstraints { make in
|
||||
@ -101,6 +121,16 @@ extension BRMineUserInfoCell {
|
||||
make.left.equalTo(nickLabel)
|
||||
make.bottom.equalTo(avatarBgView).offset(-13)
|
||||
}
|
||||
|
||||
coinView.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview()
|
||||
make.top.equalTo(avatarBgView.snp.bottom).offset(23)
|
||||
}
|
||||
|
||||
donateView.snp.makeConstraints { make in
|
||||
make.top.equalTo(coinView)
|
||||
make.left.equalTo(coinView.snp.right).offset(35)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
100
BeeReel/Class/Mine/View/BRMineVipCell.swift
Normal file
@ -0,0 +1,100 @@
|
||||
//
|
||||
// BRMineVipCell.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRMineVipCell: BRTableViewCell {
|
||||
|
||||
|
||||
private lazy var bgView: UIView = {
|
||||
let view = UIImageView(image: UIImage(named: "vip bg"))
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var vipIconView: UIView = {
|
||||
let view = UIImageView(image: UIImage(named: "Frame"))
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var titleLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontRegular(ofSize: 12)
|
||||
label.textColor = .colorFFFFFF()
|
||||
label.text = "VIP Unlocks All Dramas!".localized
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var goView: UIView = {
|
||||
let view = UIImageView(image: UIImage(named: "Frame 1508"))
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var markView: UIView = {
|
||||
let view = UIImageView(image: UIImage(named: "Rectangle 87"))
|
||||
|
||||
let label = UILabel()
|
||||
label.font = .fontMedium(ofSize: 9)
|
||||
label.textColor = .colorFFFFFF()
|
||||
label.text = "SALE"
|
||||
view.addSubview(label)
|
||||
label.snp.makeConstraints { make in
|
||||
make.centerX.equalToSuperview()
|
||||
make.top.equalToSuperview().offset(1)
|
||||
}
|
||||
|
||||
return view
|
||||
}()
|
||||
|
||||
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
||||
|
||||
br_setupUI()
|
||||
}
|
||||
|
||||
@MainActor required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension BRMineVipCell {
|
||||
|
||||
private func br_setupUI() {
|
||||
contentView.addSubview(bgView)
|
||||
bgView.addSubview(vipIconView)
|
||||
bgView.addSubview(titleLabel)
|
||||
bgView.addSubview(goView)
|
||||
contentView.addSubview(markView)
|
||||
|
||||
bgView.snp.makeConstraints { make in
|
||||
make.left.right.bottom.equalToSuperview()
|
||||
make.top.equalToSuperview().offset(4)
|
||||
make.height.equalTo(52)
|
||||
}
|
||||
|
||||
vipIconView.snp.makeConstraints { make in
|
||||
make.centerY.equalToSuperview()
|
||||
make.left.equalToSuperview().offset(12)
|
||||
}
|
||||
|
||||
titleLabel.snp.makeConstraints { make in
|
||||
make.centerY.equalToSuperview()
|
||||
make.left.equalTo(vipIconView.snp.right).offset(5)
|
||||
}
|
||||
|
||||
goView.snp.makeConstraints { make in
|
||||
make.centerY.equalToSuperview()
|
||||
make.right.equalToSuperview().offset(-10)
|
||||
}
|
||||
|
||||
markView.snp.makeConstraints { make in
|
||||
make.right.equalToSuperview().offset(-15)
|
||||
make.top.equalToSuperview()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
131
BeeReel/Class/Store/Controller/BRStoreViewController.swift
Normal file
@ -0,0 +1,131 @@
|
||||
//
|
||||
// BRStoreViewController.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRStoreViewController: BRViewController {
|
||||
|
||||
private var payData: BRPayDateModel?
|
||||
|
||||
private lazy var scrollView: BRScrollView = {
|
||||
let scrollView = BRScrollView()
|
||||
return scrollView
|
||||
}()
|
||||
|
||||
private lazy var stackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.axis = .vertical
|
||||
stackView.spacing = 14
|
||||
return stackView
|
||||
}()
|
||||
|
||||
private lazy var vipView: BRStoreVipView = {
|
||||
let view = BRStoreVipView()
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var coinView: BRStoreCoinView = {
|
||||
let view = BRStoreCoinView()
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var tipView: UIView = {
|
||||
let view = UIView()
|
||||
let label = UILabel()
|
||||
label.font = .fontRegular(ofSize: 12)
|
||||
label.textColor = .colorD3D3D3()
|
||||
label.numberOfLines = 0
|
||||
label.text = "kStoreTipText".localized
|
||||
view.addSubview(label)
|
||||
|
||||
label.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview().offset(15)
|
||||
make.top.bottom.equalToSuperview()
|
||||
make.right.lessThanOrEqualToSuperview().offset(-15)
|
||||
}
|
||||
|
||||
return view
|
||||
}()
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
self.title = "Store".localized
|
||||
self.statusBarStyle = .lightContent
|
||||
self.view.backgroundColor = .color1C1C1C()
|
||||
|
||||
configNavigationBack("nav_back_icon_03")
|
||||
|
||||
br_setupUI()
|
||||
|
||||
requestPayData()
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
self.navigationController?.setNavigationBarHidden(false, animated: true)
|
||||
br_setNavigation(style: .dark)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension BRStoreViewController {
|
||||
|
||||
private func br_setupUI() {
|
||||
view.addSubview(scrollView)
|
||||
scrollView.addSubview(stackView)
|
||||
|
||||
scrollView.snp.makeConstraints { make in
|
||||
make.edges.equalToSuperview()
|
||||
}
|
||||
|
||||
stackView.snp.makeConstraints { make in
|
||||
make.top.equalToSuperview().offset(10)
|
||||
make.left.equalToSuperview()
|
||||
make.width.equalTo(UIScreen.width)
|
||||
make.bottom.equalToSuperview().offset(-(UIScreen.tabbarSafeBottomMargin + 10))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension BRStoreViewController {
|
||||
|
||||
private func requestPayData() {
|
||||
|
||||
BRStoreAPI.requestPayTemplate { [weak self] model in
|
||||
guard let self = self else { return }
|
||||
guard let model = model else { return }
|
||||
|
||||
self.stackView.br_removeAllArrangedSubview()
|
||||
self.payData = model
|
||||
self.vipView.list = model.list_sub_vip ?? []
|
||||
self.coinView.list = model.list_coins ?? []
|
||||
|
||||
if let sort = model.sort, sort.count > 0 {
|
||||
sort.forEach {
|
||||
if $0 == .vip, model.list_sub_vip?.isEmpty == false {
|
||||
self.stackView.addArrangedSubview(self.vipView)
|
||||
} else if $0 == .coin, model.list_coins?.isEmpty == false {
|
||||
self.stackView.addArrangedSubview(self.coinView)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if model.list_sub_vip?.isEmpty == false {
|
||||
self.stackView.addArrangedSubview(self.vipView)
|
||||
}
|
||||
if model.list_coins?.isEmpty == false {
|
||||
self.stackView.addArrangedSubview(self.coinView)
|
||||
}
|
||||
}
|
||||
|
||||
self.stackView.addArrangedSubview(self.tipView)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
100
BeeReel/Class/Store/Model/BRPayDateModel.swift
Normal file
@ -0,0 +1,100 @@
|
||||
//
|
||||
// BRPayDateModel.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import SmartCodable
|
||||
|
||||
class BRPayDateModel: BRModel, SmartCodable {
|
||||
|
||||
enum SortName: String, SmartCaseDefaultable {
|
||||
case coin = "list_coins"
|
||||
case vip = "list_sub_vip"
|
||||
}
|
||||
|
||||
var list_coins: [BRPayItem]?
|
||||
var list_sub_vip: [BRPayItem]?
|
||||
var sort: [SortName]?
|
||||
}
|
||||
|
||||
|
||||
class BRPayItem: BRModel, SmartCodable {
|
||||
|
||||
enum VipTypeKey: String, SmartCaseDefaultable {
|
||||
case week = "week"
|
||||
case month = "month"
|
||||
case quarter = "quarter"
|
||||
case year = "year"
|
||||
}
|
||||
|
||||
enum SizeType: String, SmartCaseDefaultable {
|
||||
case big = "big"
|
||||
case small = "small"
|
||||
}
|
||||
|
||||
|
||||
var id: String?
|
||||
var status: String?
|
||||
var price: String?
|
||||
var origin_price: String?
|
||||
var backhaul_price: String?
|
||||
var coins: Int?
|
||||
var send_coins: Int?
|
||||
var buy_type: BRStoreAPI.BuyType?
|
||||
|
||||
var vip_type: String?
|
||||
var vip_type_key: VipTypeKey?
|
||||
|
||||
var sort: String?
|
||||
var sp_description: String?
|
||||
var brief: String?
|
||||
var title: String?
|
||||
|
||||
var send_coin_ttl: Int?
|
||||
|
||||
var size: SizeType?
|
||||
|
||||
|
||||
|
||||
var ios_template_id: String?
|
||||
///角标
|
||||
var corner_marker: String?
|
||||
///平台
|
||||
var platform: String?
|
||||
///货币符号
|
||||
var currency: String?
|
||||
|
||||
|
||||
static func mappingForKey() -> [SmartKeyTransformer]? {
|
||||
return [
|
||||
CodingKeys.sp_description <--- ["description"]
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
|
||||
func getTimeString() -> String? {
|
||||
switch self.vip_type_key {
|
||||
case .week:
|
||||
return "week".localized
|
||||
|
||||
case .month:
|
||||
return "month".localized
|
||||
|
||||
case .quarter:
|
||||
return "quarter".localized
|
||||
|
||||
case .year:
|
||||
return "year".localized
|
||||
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
69
BeeReel/Class/Store/View/BRStoreCoinBigCell.swift
Normal file
@ -0,0 +1,69 @@
|
||||
//
|
||||
// BRStoreCoinBigCell.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRStoreCoinBigCell: BRStoreCoinCell {
|
||||
|
||||
override var item: BRPayItem? {
|
||||
didSet {
|
||||
if item?.corner_marker?.isEmpty == false {
|
||||
self.hotView.isHidden = false
|
||||
} else {
|
||||
self.hotView.isHidden = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lazy var hotView: UIImageView = {
|
||||
let imageView = UIImageView(image: UIImage(named: "hot_icon_04"))
|
||||
return imageView
|
||||
}()
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
bgView.image = UIImage(named: "Frame 89")
|
||||
|
||||
coinLabel.font = .fontBold(ofSize: 20)
|
||||
coinLabel.textColor = .color2C042C()
|
||||
|
||||
sendCoinLabel.textColor = .colorB45A00()
|
||||
sendCoinLabel.font = .fontMedium(ofSize: 14)
|
||||
|
||||
unitLabel.textColor = .colorA86800()
|
||||
unitLabel.font = .fontMedium(ofSize: 14).withBoldItalic()
|
||||
|
||||
|
||||
priceLabel.textColor = .colorA86800()
|
||||
priceLabel.font = .fontBold(ofSize: 20).withBoldItalic()
|
||||
|
||||
sendRatioBgView.backgroundColor = .colorFFB635()
|
||||
|
||||
bgView.addSubview(hotView)
|
||||
|
||||
hotView.snp.makeConstraints { make in
|
||||
make.right.equalToSuperview().offset(-5)
|
||||
make.top.equalToSuperview().offset(4)
|
||||
}
|
||||
|
||||
|
||||
coinBgView.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview().offset(9)
|
||||
make.top.equalToSuperview().offset(27)
|
||||
}
|
||||
|
||||
sendCoinLabel.snp.makeConstraints { make in
|
||||
make.centerY.equalTo(coinBgView)
|
||||
make.left.equalTo(coinBgView.snp.right).offset(4)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@MainActor required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
}
|
150
BeeReel/Class/Store/View/BRStoreCoinCell.swift
Normal file
@ -0,0 +1,150 @@
|
||||
//
|
||||
// BRStoreCoinCell.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRStoreCoinCell: BRCollectionViewCell {
|
||||
|
||||
var item: BRPayItem? {
|
||||
didSet {
|
||||
coinLabel.text = "\(item?.coins ?? 0)"
|
||||
|
||||
if let sendCoins = item?.send_coins, sendCoins > 0, let coins = item?.coins {
|
||||
sendCoinLabel.isHidden = false
|
||||
sendRatioBgView.isHidden = false
|
||||
|
||||
sendCoinLabel.text = "+\(sendCoins)"
|
||||
|
||||
let ratio = String(format: "%.0f", CGFloat(sendCoins) / CGFloat(coins) * 100)
|
||||
sendRatioLabel.text = "+\(ratio)%"
|
||||
|
||||
} else {
|
||||
sendCoinLabel.isHidden = true
|
||||
sendRatioBgView.isHidden = true
|
||||
}
|
||||
|
||||
unitLabel.text = item?.currency
|
||||
priceLabel.text = item?.price
|
||||
}
|
||||
}
|
||||
|
||||
private(set) lazy var bgView: UIImageView = {
|
||||
let view = UIImageView()
|
||||
return view
|
||||
}()
|
||||
|
||||
lazy var coinBgView: UIView = {
|
||||
let view = UIView()
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var coinIconView: UIView = {
|
||||
let view = UIImageView(image: UIImage(named: "coins"))
|
||||
return view
|
||||
}()
|
||||
|
||||
lazy var coinLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
return label
|
||||
}()
|
||||
|
||||
lazy var sendCoinLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
return label
|
||||
}()
|
||||
|
||||
lazy var priceBgView: UIView = {
|
||||
let view = UIView()
|
||||
return view
|
||||
}()
|
||||
|
||||
lazy var unitLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
return label
|
||||
}()
|
||||
|
||||
lazy var priceLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
return label
|
||||
}()
|
||||
|
||||
lazy var sendRatioBgView: UIView = {
|
||||
let view = UIView()
|
||||
view.br_setRoundedCorner(topLeft: 10, topRight: 0, bottomLeft: 0, bottomRight: 10)
|
||||
return view
|
||||
}()
|
||||
|
||||
lazy var sendRatioLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontMedium(ofSize: 10)
|
||||
label.textColor = .colorFFFFFF()
|
||||
return label
|
||||
}()
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
|
||||
contentView.addSubview(bgView)
|
||||
bgView.addSubview(coinBgView)
|
||||
coinBgView.addSubview(coinIconView)
|
||||
coinBgView.addSubview(coinLabel)
|
||||
bgView.addSubview(sendCoinLabel)
|
||||
bgView.addSubview(priceBgView)
|
||||
priceBgView.addSubview(unitLabel)
|
||||
priceBgView.addSubview(priceLabel)
|
||||
bgView.addSubview(sendRatioBgView)
|
||||
sendRatioBgView.addSubview(sendRatioLabel)
|
||||
|
||||
bgView.snp.makeConstraints { make in
|
||||
make.edges.equalToSuperview()
|
||||
}
|
||||
|
||||
coinIconView.snp.makeConstraints { make in
|
||||
make.left.top.bottom.equalToSuperview()
|
||||
}
|
||||
|
||||
coinLabel.snp.makeConstraints { make in
|
||||
make.centerY.equalToSuperview()
|
||||
make.left.equalTo(coinIconView.snp.right).offset(4)
|
||||
make.right.equalToSuperview()
|
||||
}
|
||||
|
||||
priceBgView.snp.makeConstraints { make in
|
||||
make.centerX.equalToSuperview()
|
||||
make.bottom.equalToSuperview()
|
||||
make.height.equalTo(24)
|
||||
}
|
||||
|
||||
unitLabel.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview()
|
||||
make.centerY.equalToSuperview().offset(1)
|
||||
}
|
||||
|
||||
priceLabel.snp.makeConstraints { make in
|
||||
make.left.equalTo(unitLabel.snp.right).offset(0)
|
||||
make.centerY.equalToSuperview()
|
||||
make.right.equalToSuperview()
|
||||
}
|
||||
|
||||
sendRatioBgView.snp.makeConstraints { make in
|
||||
make.left.top.equalToSuperview()
|
||||
make.height.equalTo(16)
|
||||
}
|
||||
|
||||
sendRatioLabel.snp.makeConstraints { make in
|
||||
make.centerY.equalToSuperview()
|
||||
make.left.equalToSuperview().offset(8)
|
||||
make.right.equalToSuperview().offset(-8)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@MainActor required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
}
|
46
BeeReel/Class/Store/View/BRStoreCoinSmallCell.swift
Normal file
@ -0,0 +1,46 @@
|
||||
//
|
||||
// BRStoreCoinSmallCell.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRStoreCoinSmallCell: BRStoreCoinCell {
|
||||
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
bgView.image = UIImage(named: "Frame 1517")
|
||||
|
||||
coinLabel.font = .fontMedium(ofSize: 20)
|
||||
coinLabel.textColor = .color2C042C()
|
||||
|
||||
sendCoinLabel.textColor = .color44703E()
|
||||
sendCoinLabel.font = .fontMedium(ofSize: 12)
|
||||
|
||||
unitLabel.textColor = .color635D1B()
|
||||
unitLabel.font = .fontMedium(ofSize: 12).withBoldItalic()
|
||||
|
||||
priceLabel.textColor = .color635D1B()
|
||||
priceLabel.font = .fontBold(ofSize: 16).withBoldItalic()
|
||||
|
||||
sendRatioBgView.backgroundColor = .color44703E()
|
||||
|
||||
|
||||
coinBgView.snp.makeConstraints { make in
|
||||
make.centerX.equalToSuperview()
|
||||
make.top.equalToSuperview().offset(23)
|
||||
}
|
||||
|
||||
sendCoinLabel.snp.makeConstraints { make in
|
||||
make.centerX.equalToSuperview()
|
||||
make.top.equalTo(coinBgView.snp.bottom).offset(2)
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
}
|
176
BeeReel/Class/Store/View/BRStoreCoinView.swift
Normal file
@ -0,0 +1,176 @@
|
||||
//
|
||||
// BRStoreCoinView.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRStoreCoinView: UIView {
|
||||
|
||||
var list: [BRPayItem] = [] {
|
||||
didSet {
|
||||
|
||||
var bigList: [BRPayItem] = []
|
||||
var smallList: [BRPayItem] = []
|
||||
|
||||
list.forEach {
|
||||
if $0.size == .big {
|
||||
bigList.append($0)
|
||||
} else {
|
||||
smallList.append($0)
|
||||
}
|
||||
}
|
||||
|
||||
self.newList = [bigList, smallList]
|
||||
|
||||
|
||||
self.collectionView.reloadData()
|
||||
}
|
||||
}
|
||||
|
||||
private var newList: [[BRPayItem]] = []
|
||||
|
||||
private lazy var titleLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .colorFFFFFF()
|
||||
label.font = .fontMedium(ofSize: 14)
|
||||
label.text = "kCoinTipText".localized
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var collectionViewLayout: WaterfallMutiSectionFlowLayout = {
|
||||
let layout = WaterfallMutiSectionFlowLayout()
|
||||
layout.delegate = self
|
||||
return layout
|
||||
}()
|
||||
|
||||
private lazy var collectionView: BRCollectionView = {
|
||||
let collectionView = BRCollectionView(frame: .zero, collectionViewLayout: collectionViewLayout)
|
||||
collectionView.delegate = self
|
||||
collectionView.dataSource = self
|
||||
collectionView.showsVerticalScrollIndicator = false
|
||||
collectionView.showsHorizontalScrollIndicator = false
|
||||
collectionView.layer.masksToBounds = false
|
||||
collectionView.addObserver(self, forKeyPath: "contentSize", context: nil)
|
||||
collectionView.register(BRStoreCoinBigCell.self, forCellWithReuseIdentifier: "big")
|
||||
collectionView.register(BRStoreCoinSmallCell.self, forCellWithReuseIdentifier: "small")
|
||||
return collectionView
|
||||
}()
|
||||
|
||||
deinit {
|
||||
collectionView.removeObserver(self, forKeyPath: "contentSize")
|
||||
}
|
||||
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
|
||||
br_setupUI()
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
|
||||
if keyPath == "contentSize" {
|
||||
let height = self.collectionView.contentSize.height
|
||||
collectionView.snp.updateConstraints { make in
|
||||
make.height.equalTo(height + 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension BRStoreCoinView {
|
||||
|
||||
private func br_setupUI() {
|
||||
addSubview(titleLabel)
|
||||
addSubview(collectionView)
|
||||
|
||||
titleLabel.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview().offset(15)
|
||||
make.top.equalToSuperview()
|
||||
}
|
||||
|
||||
collectionView.snp.makeConstraints { make in
|
||||
make.left.right.bottom.equalToSuperview()
|
||||
make.top.equalToSuperview().offset(19)
|
||||
make.height.equalTo(1)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//MARK: UICollectionViewDelegate UICollectionViewDataSource
|
||||
extension BRStoreCoinView: UICollectionViewDelegate, UICollectionViewDataSource {
|
||||
func numberOfSections(in collectionView: UICollectionView) -> Int {
|
||||
self.newList.count
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||||
self.newList[section].count
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
let item = self.newList[indexPath.section][indexPath.row]
|
||||
let identifier: String
|
||||
|
||||
if item.size == .big {
|
||||
identifier = "big"
|
||||
} else {
|
||||
identifier = "small"
|
||||
}
|
||||
|
||||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath) as! BRStoreCoinCell
|
||||
cell.item = item
|
||||
return cell
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
//MARK: WaterfallMutiSectionDelegate
|
||||
extension BRStoreCoinView: WaterfallMutiSectionDelegate {
|
||||
|
||||
func heightForRowAtIndexPath(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, indexPath: IndexPath, itemWidth: CGFloat) -> CGFloat {
|
||||
let item = self.newList[indexPath.section].first
|
||||
if item?.size == .big {
|
||||
return 80
|
||||
} else {
|
||||
return 90
|
||||
}
|
||||
}
|
||||
|
||||
func columnNumber(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, section: Int) -> Int {
|
||||
let item = self.newList[section].first
|
||||
if item?.size == .big {
|
||||
return 2
|
||||
} else {
|
||||
return 3
|
||||
}
|
||||
}
|
||||
|
||||
func insetForSection(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, section: Int) -> UIEdgeInsets {
|
||||
return .init(top: 0, left: 15, bottom: 0, right: 15)
|
||||
}
|
||||
|
||||
func lineSpacing(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, section: Int) -> CGFloat {
|
||||
return 10
|
||||
}
|
||||
|
||||
func interitemSpacing(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, section: Int) -> CGFloat {
|
||||
return 10
|
||||
}
|
||||
|
||||
func spacingWithLastSection(collectionView collection: UICollectionView, layout: WaterfallMutiSectionFlowLayout, section: Int) -> CGFloat {
|
||||
return 10
|
||||
}
|
||||
|
||||
}
|
216
BeeReel/Class/Store/View/BRStoreVipCell.swift
Normal file
@ -0,0 +1,216 @@
|
||||
//
|
||||
// BRStoreVipCell.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRStoreVipCell: BRCollectionViewCell {
|
||||
|
||||
var item: BRPayItem? {
|
||||
didSet {
|
||||
vipNameLabel.text = item?.title
|
||||
unitLabel.text = item?.currency
|
||||
priceLabel.text = item?.price
|
||||
timeLabel.text = "/\(item?.getTimeString() ?? "")"
|
||||
descLabel.text = item?.sp_description
|
||||
|
||||
if let coins = item?.send_coins, coins > 0 {
|
||||
coinLabel.text = "+Extra".localized + " \(coins)"
|
||||
coinBgView.isHidden = false
|
||||
} else {
|
||||
coinBgView.isHidden = true
|
||||
}
|
||||
|
||||
switch item?.vip_type_key {
|
||||
case .week:
|
||||
bgView.image = UIImage(named: "Rectangle 89")
|
||||
bgIconView.image = UIImage(named: "vip-week")
|
||||
vipIconView.image = UIImage(named: "周")
|
||||
vipNameLabel.textColor = .color005C10()
|
||||
coinBgView.backgroundColor = .colorE4FFF2()
|
||||
|
||||
case .month:
|
||||
bgView.image = UIImage(named: "Rectangle 90")
|
||||
bgIconView.image = UIImage(named: "vip-month")
|
||||
vipIconView.image = UIImage(named: "月")
|
||||
vipNameLabel.textColor = .color5C4A00()
|
||||
coinBgView.backgroundColor = .colorFFF799()
|
||||
|
||||
case .quarter:
|
||||
bgView.image = UIImage(named: "Rectangle 91")
|
||||
bgIconView.image = UIImage(named: "vip-quarter")
|
||||
vipIconView.image = UIImage(named: "Frame 1")
|
||||
vipNameLabel.textColor = .color761600()
|
||||
coinBgView.backgroundColor = .colorFBDAD0()
|
||||
|
||||
case .year:
|
||||
bgView.image = UIImage(named: "Rectangle 92")
|
||||
bgIconView.image = UIImage(named: "vip-year")
|
||||
vipIconView.image = UIImage(named: "Frame 2")
|
||||
vipNameLabel.textColor = .color430069()
|
||||
coinBgView.backgroundColor = .colorF3D3FC()
|
||||
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
coinLabel.textColor = vipNameLabel.textColor
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private lazy var bgView: UIImageView = {
|
||||
let view = UIImageView()
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var bgIconView: UIImageView = {
|
||||
let view = UIImageView()
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var vipIconView: UIImageView = {
|
||||
let view = UIImageView()
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var vipNameLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontMedium(ofSize: 12)
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var unitLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontRegular(ofSize: 16)
|
||||
label.textColor = .color2C042C()
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var priceLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .aaHouDiHei(ofSize: 28)
|
||||
label.textColor = .color2C042C()
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var timeLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontMedium(ofSize: 14)
|
||||
label.textColor = .color2C042C()
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var descLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontRegular(ofSize: 10)
|
||||
label.textColor = .color868686()
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var coinBgView: UIView = {
|
||||
let view = UIView()
|
||||
view.br_setRoundedCorner(topLeft: 10, topRight: 0, bottomLeft: 0, bottomRight: 10)
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var coinLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontRegular(ofSize: 12)
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var coinIconView: UIImageView = {
|
||||
let view = UIImageView(image: UIImage(named: "coins 1"))
|
||||
return view
|
||||
}()
|
||||
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
|
||||
br_setupUI()
|
||||
}
|
||||
|
||||
@MainActor required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension BRStoreVipCell {
|
||||
|
||||
private func br_setupUI() {
|
||||
contentView.addSubview(bgView)
|
||||
contentView.addSubview(bgIconView)
|
||||
bgView.addSubview(vipIconView)
|
||||
bgView.addSubview(vipNameLabel)
|
||||
bgView.addSubview(unitLabel)
|
||||
bgView.addSubview(priceLabel)
|
||||
bgView.addSubview(timeLabel)
|
||||
bgView.addSubview(descLabel)
|
||||
bgView.addSubview(coinBgView)
|
||||
coinBgView.addSubview(coinLabel)
|
||||
coinBgView.addSubview(coinIconView)
|
||||
|
||||
bgView.snp.makeConstraints { make in
|
||||
make.left.right.bottom.equalToSuperview()
|
||||
make.top.equalToSuperview().offset(10)
|
||||
}
|
||||
|
||||
bgIconView.snp.makeConstraints { make in
|
||||
make.top.equalToSuperview()
|
||||
make.right.equalToSuperview().offset(-2)
|
||||
}
|
||||
|
||||
vipIconView.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview().offset(11)
|
||||
make.top.equalToSuperview().offset(8)
|
||||
}
|
||||
|
||||
vipNameLabel.snp.makeConstraints { make in
|
||||
make.centerY.equalTo(vipIconView)
|
||||
make.left.equalTo(vipIconView.snp.right).offset(3)
|
||||
}
|
||||
|
||||
unitLabel.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview().offset(13)
|
||||
make.top.equalToSuperview().offset(37)
|
||||
}
|
||||
|
||||
priceLabel.snp.makeConstraints { make in
|
||||
make.left.equalTo(unitLabel.snp.right).offset(1)
|
||||
make.bottom.equalTo(unitLabel).offset(5)
|
||||
}
|
||||
|
||||
timeLabel.snp.makeConstraints { make in
|
||||
make.left.equalTo(priceLabel.snp.right).offset(1)
|
||||
make.bottom.equalTo(unitLabel).offset(-2)
|
||||
}
|
||||
|
||||
descLabel.snp.makeConstraints { make in
|
||||
make.left.equalTo(unitLabel)
|
||||
make.bottom.equalToSuperview().offset(-15)
|
||||
}
|
||||
|
||||
coinBgView.snp.makeConstraints { make in
|
||||
make.right.bottom.equalToSuperview()
|
||||
make.height.equalTo(20)
|
||||
}
|
||||
|
||||
coinLabel.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview().offset(9)
|
||||
make.centerY.equalToSuperview()
|
||||
}
|
||||
|
||||
coinIconView.snp.makeConstraints { make in
|
||||
make.centerY.equalToSuperview()
|
||||
make.left.equalTo(coinLabel.snp.right).offset(3)
|
||||
make.right.equalToSuperview().offset(-6)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
103
BeeReel/Class/Store/View/BRStoreVipView.swift
Normal file
@ -0,0 +1,103 @@
|
||||
//
|
||||
// BRStoreVipView.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/25.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRStoreVipView: UIView {
|
||||
|
||||
var list: [BRPayItem] = [] {
|
||||
didSet {
|
||||
self.collectionView.reloadData()
|
||||
}
|
||||
}
|
||||
|
||||
private lazy var titleLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .colorFFFFFF()
|
||||
label.font = .fontMedium(ofSize: 14)
|
||||
label.text = "kVipTipText".localized
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
|
||||
let layout = UICollectionViewFlowLayout()
|
||||
layout.itemSize = .init(width: UIScreen.width - 30, height: 100)
|
||||
layout.minimumLineSpacing = 5
|
||||
layout.minimumInteritemSpacing = 5
|
||||
return layout
|
||||
}()
|
||||
|
||||
private lazy var collectionView: BRCollectionView = {
|
||||
let collectionView = BRCollectionView(frame: .zero, collectionViewLayout: collectionViewLayout)
|
||||
collectionView.isScrollEnabled = false
|
||||
collectionView.delegate = self
|
||||
collectionView.dataSource = self
|
||||
collectionView.addObserver(self, forKeyPath: "contentSize", context: nil)
|
||||
collectionView.register(BRStoreVipCell.self, forCellWithReuseIdentifier: "cell")
|
||||
return collectionView
|
||||
}()
|
||||
|
||||
deinit {
|
||||
collectionView.removeObserver(self, forKeyPath: "contentSize")
|
||||
}
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
br_setupUI()
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
|
||||
if keyPath == "contentSize" {
|
||||
let height = self.collectionView.contentSize.height
|
||||
collectionView.snp.updateConstraints { make in
|
||||
make.height.equalTo(height + 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension BRStoreVipView {
|
||||
|
||||
private func br_setupUI() {
|
||||
addSubview(titleLabel)
|
||||
addSubview(collectionView)
|
||||
|
||||
titleLabel.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview().offset(15)
|
||||
make.top.equalToSuperview()
|
||||
}
|
||||
|
||||
collectionView.snp.makeConstraints { make in
|
||||
make.left.right.bottom.equalToSuperview()
|
||||
make.top.equalToSuperview().offset(19)
|
||||
make.height.equalTo(1)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//MARK: UICollectionViewDelegate UICollectionViewDataSource
|
||||
extension BRStoreVipView: UICollectionViewDelegate, UICollectionViewDataSource {
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||||
self.list.count
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! BRStoreVipCell
|
||||
cell.item = list[indexPath.row]
|
||||
return cell
|
||||
}
|
||||
|
||||
|
||||
}
|
BIN
BeeReel/Sources/AaHouDiHei-Regular.ttf
Normal file
@ -1,7 +1,7 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "GleeStream 1.png",
|
||||
"filename" : "GleeStream 1.jpg",
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"size" : "1024x1024"
|
||||
|
After Width: | Height: | Size: 133 KiB |
Before Width: | Height: | Size: 714 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Frame 1.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame 1.imageset/Frame@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame 1.imageset/Frame@3x.png
vendored
Normal file
After Width: | Height: | Size: 1.7 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Frame 1508.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Frame 1508@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Frame 1508@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame 1508.imageset/Frame 1508@2x.png
vendored
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame 1508.imageset/Frame 1508@3x.png
vendored
Normal file
After Width: | Height: | Size: 21 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Frame 1517.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Frame 1517@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Frame 1517@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame 1517.imageset/Frame 1517@2x.png
vendored
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame 1517.imageset/Frame 1517@3x.png
vendored
Normal file
After Width: | Height: | Size: 53 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Frame 2.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame 2.imageset/Frame@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame 2.imageset/Frame@3x.png
vendored
Normal file
After Width: | Height: | Size: 1.7 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Frame 89.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Frame 89@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Frame 89@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame 89.imageset/Frame 89@2x.png
vendored
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame 89.imageset/Frame 89@3x.png
vendored
Normal file
After Width: | Height: | Size: 55 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Frame.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame.imageset/Frame@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame.imageset/Frame@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.3 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Rectangle 87.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Rectangle 87@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Rectangle 87@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Rectangle 87.imageset/Rectangle 87@2x.png
vendored
Normal file
After Width: | Height: | Size: 548 B |
BIN
BeeReel/Sources/Assets.xcassets/icon/Rectangle 87.imageset/Rectangle 87@3x.png
vendored
Normal file
After Width: | Height: | Size: 760 B |
22
BeeReel/Sources/Assets.xcassets/icon/Rectangle 89.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Rectangle 89@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Rectangle 89@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Rectangle 89.imageset/Rectangle 89@2x.png
vendored
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Rectangle 89.imageset/Rectangle 89@3x.png
vendored
Normal file
After Width: | Height: | Size: 213 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Rectangle 90.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Rectangle 89@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Rectangle 89@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Rectangle 90.imageset/Rectangle 89@2x.png
vendored
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Rectangle 90.imageset/Rectangle 89@3x.png
vendored
Normal file
After Width: | Height: | Size: 216 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Rectangle 91.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Rectangle 89@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Rectangle 89@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Rectangle 91.imageset/Rectangle 89@2x.png
vendored
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Rectangle 91.imageset/Rectangle 89@3x.png
vendored
Normal file
After Width: | Height: | Size: 211 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Rectangle 92.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Rectangle 89@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Rectangle 89@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Rectangle 92.imageset/Rectangle 89@2x.png
vendored
Normal file
After Width: | Height: | Size: 98 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Rectangle 92.imageset/Rectangle 89@3x.png
vendored
Normal file
After Width: | Height: | Size: 212 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Rewards.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Rewards@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Rewards@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Rewards.imageset/Rewards@2x.png
vendored
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Rewards.imageset/Rewards@3x.png
vendored
Normal file
After Width: | Height: | Size: 29 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/Store.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Store@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Store@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Store.imageset/Store@2x.png
vendored
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Store.imageset/Store@3x.png
vendored
Normal file
After Width: | Height: | Size: 30 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/arrow_right_icon_03.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Frame.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Frame@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/arrow_right_icon_03.imageset/Frame.png
vendored
Normal file
After Width: | Height: | Size: 331 B |
BIN
BeeReel/Sources/Assets.xcassets/icon/arrow_right_icon_03.imageset/Frame@3x.png
vendored
Normal file
After Width: | Height: | Size: 404 B |
22
BeeReel/Sources/Assets.xcassets/icon/coins 1.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "coins@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "coins@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/coins 1.imageset/coins@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/coins 1.imageset/coins@3x.png
vendored
Normal file
After Width: | Height: | Size: 1.9 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/coins.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "coins@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "coins@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/coins.imageset/coins@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/coins.imageset/coins@3x.png
vendored
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/nav_back_icon_03.imageset/Component 46@2x.png
vendored
Normal file
After Width: | Height: | Size: 764 B |
BIN
BeeReel/Sources/Assets.xcassets/icon/nav_back_icon_03.imageset/Component 46@3x.png
vendored
Normal file
After Width: | Height: | Size: 1.1 KiB |
25
BeeReel/Sources/Assets.xcassets/icon/nav_back_icon_03.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Component 46@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Component 46@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"template-rendering-intent" : "original"
|
||||
}
|
||||
}
|
22
BeeReel/Sources/Assets.xcassets/icon/vip bg.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "vip bg@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "vip bg@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/vip bg.imageset/vip bg@2x.png
vendored
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/vip bg.imageset/vip bg@3x.png
vendored
Normal file
After Width: | Height: | Size: 3.8 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/vip-month.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "vip-month@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "vip-month@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/vip-month.imageset/vip-month@2x.png
vendored
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/vip-month.imageset/vip-month@3x.png
vendored
Normal file
After Width: | Height: | Size: 84 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/vip-quarter.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "vip-quarter@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "vip-quarter@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/vip-quarter.imageset/vip-quarter@2x.png
vendored
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/vip-quarter.imageset/vip-quarter@3x.png
vendored
Normal file
After Width: | Height: | Size: 81 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/vip-week.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "vip-week@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "vip-week@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/vip-week.imageset/vip-week@2x.png
vendored
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/vip-week.imageset/vip-week@3x.png
vendored
Normal file
After Width: | Height: | Size: 87 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/vip-year.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "vip-year@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "vip-year@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/vip-year.imageset/vip-year@2x.png
vendored
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/vip-year.imageset/vip-year@3x.png
vendored
Normal file
After Width: | Height: | Size: 84 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/周.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/周.imageset/周@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/周.imageset/周@3x.png
vendored
Normal file
After Width: | Height: | Size: 1.7 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/月.imageset/Contents.json
vendored
Normal file
@ -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
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/月.imageset/月@2x.png
vendored
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/月.imageset/月@3x.png
vendored
Normal file
After Width: | Height: | Size: 1.8 KiB |
@ -2,6 +2,10 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>UIAppFonts</key>
|
||||
<array>
|
||||
<string>AaHouDiHei-Regular.ttf</string>
|
||||
</array>
|
||||
<key>UIApplicationSceneManifest</key>
|
||||
<dict>
|
||||
<key>UIApplicationSupportsMultipleScenes</key>
|
||||
|
@ -1,6 +1,17 @@
|
||||
{
|
||||
"sourceLanguage" : "en",
|
||||
"strings" : {
|
||||
"+Extra" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "+Extra"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"About Us" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@ -89,6 +100,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Daily Check-In" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Daily Check-In"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"EP.##" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@ -166,6 +188,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"kCoinTipText" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Stock Coins | Binge Freely"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"kNormalRmptyDetail" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@ -232,6 +265,28 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"kStoreTipText" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "1. Coins are virtual items and cannot be refunded. Use it for this product. \n\n2. Gold coins will never expire, the reward coins will expire 24 hours a day.\n\r\n3. Coins will be used first when unlocking episodes. If the amount is insufficient, reward coins will automatically be used. \n\r\n4. The purchase has not been credited, click <Restore> torefresh. \n\r\n5. For other questions, contact us via Profile>Help &feedback."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"kVipTipText" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Go VIP | Auto renew, cancel anytime "
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Last Searched" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@ -243,6 +298,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"month" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "month"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Most Searched" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@ -287,6 +353,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"quarter" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "quarter"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Remove" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@ -298,6 +375,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Rewards" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Rewards"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Search Results" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@ -331,6 +419,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Store" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Store"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Third-party information sharing list" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@ -364,6 +463,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Unlock More" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "Unlock More"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"User Agreement" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@ -375,6 +485,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"VIP Unlocks All Dramas!" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "VIP Unlocks All Dramas!"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Visitor" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@ -386,6 +507,28 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"week" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "week"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"year" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "year"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Youth Internet Civility Convention" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
|