vip弹窗
@ -152,6 +152,8 @@
|
||||
BFC676B92E1385FC006659E5 /* BRPopularPicksSmallCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC676B82E1385FC006659E5 /* BRPopularPicksSmallCell.swift */; };
|
||||
BFC676BC2E138ABB006659E5 /* BRNewReleasesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC676BB2E138ABB006659E5 /* BRNewReleasesViewController.swift */; };
|
||||
BFC676BE2E13A8EB006659E5 /* UIScrollView+BRRefresh.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC676BD2E13A8DD006659E5 /* UIScrollView+BRRefresh.swift */; };
|
||||
F32BAEA92E3A173A00CC203C /* BRVipAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = F32BAEA82E3A173A00CC203C /* BRVipAlert.swift */; };
|
||||
F32BAEAB2E3A1BF500CC203C /* BRVipAlertCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F32BAEAA2E3A1BF500CC203C /* BRVipAlertCell.swift */; };
|
||||
F39855202E32166300E2D28D /* BRFavoritesPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F398551F2E32166300E2D28D /* BRFavoritesPageViewController.swift */; };
|
||||
F39855222E32227D00E2D28D /* BRPlayHistorysViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855212E32227D00E2D28D /* BRPlayHistorysViewController.swift */; };
|
||||
F39855242E3222BE00E2D28D /* BRPlayHistorysCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F39855232E3222BE00E2D28D /* BRPlayHistorysCell.swift */; };
|
||||
@ -380,6 +382,8 @@
|
||||
BFC676BD2E13A8DD006659E5 /* UIScrollView+BRRefresh.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIScrollView+BRRefresh.swift"; sourceTree = "<group>"; };
|
||||
C8F11086BA392585E9563BA7 /* Pods-ShortBox.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShortBox.release.xcconfig"; path = "Target Support Files/Pods-ShortBox/Pods-ShortBox.release.xcconfig"; sourceTree = "<group>"; };
|
||||
F06627B1DEE86552C2A87AEC /* Pods-BeeReel.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BeeReel.debug.xcconfig"; path = "Target Support Files/Pods-BeeReel/Pods-BeeReel.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
F32BAEA82E3A173A00CC203C /* BRVipAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRVipAlert.swift; sourceTree = "<group>"; };
|
||||
F32BAEAA2E3A1BF500CC203C /* BRVipAlertCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRVipAlertCell.swift; sourceTree = "<group>"; };
|
||||
F398551F2E32166300E2D28D /* BRFavoritesPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRFavoritesPageViewController.swift; sourceTree = "<group>"; };
|
||||
F39855212E32227D00E2D28D /* BRPlayHistorysViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRPlayHistorysViewController.swift; sourceTree = "<group>"; };
|
||||
F39855232E3222BE00E2D28D /* BRPlayHistorysCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BRPlayHistorysCell.swift; sourceTree = "<group>"; };
|
||||
@ -1194,6 +1198,8 @@
|
||||
F39855672E37087500E2D28D /* BRRewardCoinsRecordCell.swift */,
|
||||
F39855692E3709C500E2D28D /* BRWalletHeaderView.swift */,
|
||||
F398556B2E3717A500E2D28D /* BRWalletHeaderItemView.swift */,
|
||||
F32BAEA82E3A173A00CC203C /* BRVipAlert.swift */,
|
||||
F32BAEAA2E3A1BF500CC203C /* BRVipAlertCell.swift */,
|
||||
);
|
||||
path = View;
|
||||
sourceTree = "<group>";
|
||||
@ -1520,6 +1526,7 @@
|
||||
BF692B1C2E0A7DE800A5C2DA /* BRAppTool.swift in Sources */,
|
||||
BFC676622E0E2C8E006659E5 /* WMZBannerView.m in Sources */,
|
||||
BFC676632E0E2C8E006659E5 /* WMZBannerOverLayout.m in Sources */,
|
||||
F32BAEAB2E3A1BF500CC203C /* BRVipAlertCell.swift in Sources */,
|
||||
F39855482E33928400E2D28D /* BRStoreCoinBigCell.swift in Sources */,
|
||||
BFC676642E0E2C8E006659E5 /* WMZBannerFlowLayout.m in Sources */,
|
||||
BF02B81E2E2F99D900172177 /* BRWebView.swift in Sources */,
|
||||
@ -1544,6 +1551,7 @@
|
||||
BF0DBDD12E0D4E150035F6B4 /* BRTabBar.swift in Sources */,
|
||||
BF692B562E0AA92100A5C2DA /* BRCollectionViewCell.swift in Sources */,
|
||||
BF02B7E32E2E08BD00172177 /* BRDetailEpButton.swift in Sources */,
|
||||
F32BAEA92E3A173A00CC203C /* BRVipAlert.swift in Sources */,
|
||||
F398553E2E336D3000E2D28D /* BRPayDateModel.swift in Sources */,
|
||||
BF692B072E0A771C00A5C2DA /* BRModel.swift in Sources */,
|
||||
BF02B82F2E30895700172177 /* BRSearchRecordView.swift in Sources */,
|
||||
|
@ -21,3 +21,5 @@ let kBRHasBeenOpenedAPPDefaultsKey = "kBRHasBeenOpenedAPPDefaultsKey"
|
||||
let kBRApnsAlertDefaultsKey = "kBRApnsAlertDefaultsKey"
|
||||
|
||||
let kBRWaitRestoreIAPDefaultsKey = "kBRWaitRestoreIAPDefaultsKey"
|
||||
|
||||
let kBRVipAlertDateDefaultsKey = "kBRVipAlertDateDefaultsKey"
|
||||
|
@ -214,4 +214,16 @@ extension UIColor {
|
||||
static func color499C20(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0x499C20, alpha: alpha)
|
||||
}
|
||||
|
||||
static func colorF7F7F7(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0xF7F7F7, alpha: alpha)
|
||||
}
|
||||
|
||||
static func colorC5ED8A(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0xC5ED8A, alpha: alpha)
|
||||
}
|
||||
|
||||
static func color495047(alpha: CGFloat = 1) -> UIColor {
|
||||
return UIColor(rgb: 0x495047, alpha: alpha)
|
||||
}
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ import UIKit
|
||||
|
||||
class BRVideoAPI {
|
||||
///获取视频详情
|
||||
static func requestVideoDetail(shortPlayId: String, activityId: String? = nil, revolution: BRShortModel.VideoRevolution? = nil, completer: ((_ model: BRVideoDetailModel?) -> Void)?) {
|
||||
static func requestVideoDetail(shortPlayId: String, activityId: String? = nil, revolution: BRShortModel.VideoRevolution? = nil, completer: ((_ model: BRVideoDetailModel?, _ code: Int?, _ msg: String?) -> Void)?) {
|
||||
var parameters: [String : Any] = [
|
||||
"short_play_id" : shortPlayId,
|
||||
"video_id" : "0"
|
||||
@ -25,10 +25,15 @@ class BRVideoAPI {
|
||||
|
||||
var param = BRNetworkParameters(path: "/getVideoDetails")
|
||||
param.method = .get
|
||||
param.isToast = false
|
||||
param.parameters = parameters
|
||||
|
||||
BRNetwork.request(parameters: param) { (response: BRNetworkResponse<BRVideoDetailModel>) in
|
||||
completer?(response.data)
|
||||
if response.code == BRNetworkCodeSucceed {
|
||||
completer?(response.data, response.code, response.msg)
|
||||
} else {
|
||||
completer?(nil, response.code, response.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@ import UIKit
|
||||
|
||||
class BRImageView: UIImageView {
|
||||
|
||||
var placeholderColor = UIColor.black
|
||||
var placeholderColor = UIColor.colorF7F7F7()
|
||||
|
||||
private lazy var placeholderImageView: UIImageView = {
|
||||
let imageView = UIImageView(image: UIImage(named: "placeholder_image_01"))
|
||||
|
@ -7,8 +7,8 @@
|
||||
<key>com.apple.developer.associated-domains</key>
|
||||
<array>
|
||||
<string>applinks:beereel.go.link</string>
|
||||
<string>applinks:www.breeltv.com</string>
|
||||
<string>applinks:jyev.adj.st</string>
|
||||
<string>applinks:www.breeltv.com</string>
|
||||
</array>
|
||||
<key>keychain-access-groups</key>
|
||||
<array/>
|
||||
|
@ -47,7 +47,7 @@ class BRHomeHeaderView: UIView {
|
||||
param.wEffect = false
|
||||
param.wAutoScroll = false
|
||||
///开启无限循环
|
||||
param.wRepeat = true
|
||||
param.wRepeat = false
|
||||
param.wHideBannerControl = true
|
||||
param.wCanFingerSliding = false
|
||||
|
||||
|
@ -33,6 +33,9 @@ class BRMineViewController: BRViewController {
|
||||
return arr
|
||||
}()
|
||||
|
||||
private weak var vipAlertView: BRVipAlert?
|
||||
private var payDataRequest: BRPayDataRequest = BRPayDataRequest()
|
||||
|
||||
private lazy var lightImageView: UIImageView = {
|
||||
let imageView = UIImageView(image: UIImage(named: "light_icon_03"))
|
||||
return imageView
|
||||
@ -70,6 +73,7 @@ class BRMineViewController: BRViewController {
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
super.viewDidAppear(animated)
|
||||
BRLoginManager.manager.updateUserInfo(completer: nil)
|
||||
// self.showVipAlert()
|
||||
}
|
||||
|
||||
}
|
||||
@ -100,7 +104,24 @@ extension BRMineViewController {
|
||||
self.tableView.reloadData()
|
||||
}
|
||||
|
||||
|
||||
private func showVipAlert() {
|
||||
guard BRLoginManager.manager.userInfo?.is_vip != true else { return }
|
||||
guard BRVipAlert.isAllowShowAlert else { return }
|
||||
|
||||
|
||||
payDataRequest.requestProducts(isToast: false) { [weak self] model in
|
||||
guard let self = self else { return }
|
||||
guard self.isDidAppear else { return }
|
||||
guard self.vipAlertView == nil else { return }
|
||||
|
||||
// guard let list = model?.list_sub_vip, list.count > 0 else { return }
|
||||
|
||||
let alert = BRVipAlert().show(in: BRAppTool.keyWindow)
|
||||
alert.listArr = model?.list_sub_vip ?? []
|
||||
self.vipAlertView = alert
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: -------------- UITableViewDelegate UITableViewDataSource --------------
|
||||
|
@ -228,11 +228,20 @@ extension BRVideoDetailViewController {
|
||||
recommandTimer = Timer.scheduledTimer(timeInterval: 6, target: YYTextWeakProxy(target: self), selector: #selector(handleRecommandTimer), userInfo: nil, repeats: false)
|
||||
|
||||
BRHUD.show(containerView: self.view)
|
||||
BRVideoAPI.requestVideoDetail(shortPlayId: shortPlayId, activityId: activityId) { [weak self] model in
|
||||
BRVideoAPI.requestVideoDetail(shortPlayId: shortPlayId, activityId: activityId) { [weak self] model, code, msg in
|
||||
BRHUD.dismiss()
|
||||
|
||||
guard let self = self else { return }
|
||||
guard let model = model else { return }
|
||||
guard let model = model else {
|
||||
if code == 10014 {
|
||||
self.navigationController?.popViewController(animated: true)
|
||||
BRToast.show(text: "No Short Found".localized)
|
||||
} else {
|
||||
BRToast.show(text: msg)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
self.detailArr.removeAll()
|
||||
self.detailArr.append(model)
|
||||
|
||||
|
@ -35,6 +35,8 @@ class BRVideoRechargeView: BRPanModalContentView {
|
||||
}
|
||||
}
|
||||
|
||||
self.stackView.addArrangedSubview(self.tipView)
|
||||
|
||||
self.setNeedsLayoutUpdate()
|
||||
}
|
||||
}
|
||||
@ -117,6 +119,13 @@ class BRVideoRechargeView: BRPanModalContentView {
|
||||
return button
|
||||
}()
|
||||
|
||||
private lazy var closeButton: UIButton = {
|
||||
let button = UIButton(type: .custom)
|
||||
button.setImage(UIImage(named: "Frame 9"), for: .normal)
|
||||
button.addTarget(self, action: #selector(handleCloseButton), for: .touchUpInside)
|
||||
return button
|
||||
}()
|
||||
|
||||
private lazy var stackView: UIStackView = {
|
||||
let stackView = UIStackView()
|
||||
stackView.axis = .vertical
|
||||
@ -146,6 +155,25 @@ class BRVideoRechargeView: BRPanModalContentView {
|
||||
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
|
||||
}()
|
||||
|
||||
|
||||
deinit {
|
||||
NotificationCenter.default.removeObserver(self)
|
||||
}
|
||||
@ -153,7 +181,7 @@ class BRVideoRechargeView: BRPanModalContentView {
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(updateUserInfo), name: BRLoginManager.userInfoUpdateNotification, object: nil)
|
||||
self.contentHeight = UIScreen.height - UIScreen.navBarHeight
|
||||
self.contentHeight = UIScreen.height - UIScreen.statusBarHeight
|
||||
self.mainScrollView = self.scrollView
|
||||
|
||||
br_setupUI()
|
||||
@ -165,6 +193,12 @@ class BRVideoRechargeView: BRPanModalContentView {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
@objc private func handleCloseButton() {
|
||||
self.dismiss(animated: true) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override func allowsPullDownWhenShortState() -> Bool {
|
||||
return true
|
||||
@ -185,6 +219,7 @@ extension BRVideoRechargeView {
|
||||
addSubview(coinLabel)
|
||||
addSubview(coinIconView)
|
||||
addSubview(unlockCoinsView)
|
||||
addSubview(closeButton)
|
||||
|
||||
scrollView.snp.makeConstraints { make in
|
||||
make.left.right.bottom.equalToSuperview()
|
||||
@ -214,10 +249,16 @@ extension BRVideoRechargeView {
|
||||
|
||||
unlockCoinsView.snp.makeConstraints { make in
|
||||
make.centerY.equalTo(coinIconView)
|
||||
make.right.equalToSuperview().offset(-15)
|
||||
// make.right.equalToSuperview().offset(-15)
|
||||
make.left.equalTo(coinIconView.snp.right).offset(20)
|
||||
make.height.equalTo(26)
|
||||
}
|
||||
|
||||
closeButton.snp.makeConstraints { make in
|
||||
make.centerY.equalTo(unlockCoinsView)
|
||||
make.right.equalToSuperview().offset(-15)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -76,6 +76,8 @@ class BRStoreViewController: BRViewController {
|
||||
br_setupUI()
|
||||
|
||||
requestPayData()
|
||||
|
||||
self.restore(isLoding: false)
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
@ -85,11 +87,16 @@ class BRStoreViewController: BRViewController {
|
||||
}
|
||||
|
||||
@objc private func handleRestore() {
|
||||
BRIAP.manager.restore { isFinish in
|
||||
|
||||
self.restore(isLoding: true)
|
||||
}
|
||||
|
||||
private func restore(isLoding: Bool) {
|
||||
|
||||
BRIAP.manager.restore(isLoding: isLoding) { isFinish in
|
||||
guard isFinish else { return }
|
||||
BRLoginManager.manager.updateUserInfo(completer: nil)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@ import StoreKit
|
||||
class BRPayDataRequest: NSObject {
|
||||
|
||||
private var oldTemplateModel: BRPayDateModel?
|
||||
private(set) var newTemplateModel: BRPayDateModel?
|
||||
|
||||
private var completerBlock: ((_ model: BRPayDateModel?) -> Void)?
|
||||
|
||||
@ -23,35 +24,54 @@ class BRPayDataRequest: NSObject {
|
||||
self.isLoding = isLoding
|
||||
self.isToast = isToast
|
||||
|
||||
// if let model = self.newTemplateModel {
|
||||
// self.completerBlock?(model)
|
||||
// return
|
||||
// }
|
||||
|
||||
|
||||
if isLoding {
|
||||
BRHUD.show()
|
||||
}
|
||||
|
||||
BRStoreAPI.requestPayTemplate(isToast: isToast) { [weak self] model in
|
||||
if isLoding {
|
||||
BRHUD.dismiss()
|
||||
}
|
||||
guard let self = self else { return }
|
||||
guard let model = model else {
|
||||
if isLoding {
|
||||
BRHUD.dismiss()
|
||||
}
|
||||
self.completerBlock?(nil)
|
||||
return
|
||||
}
|
||||
self.oldTemplateModel = model
|
||||
|
||||
var productIdArr: [String] = []
|
||||
model.list_sub_vip?.forEach { item in
|
||||
productIdArr.append(BRIAP.manager.getProductId(templateId: item.ios_template_id) ?? "")
|
||||
}
|
||||
model.list_coins?.forEach { item in
|
||||
productIdArr.append(BRIAP.manager.getProductId(templateId: item.ios_template_id) ?? "")
|
||||
}
|
||||
|
||||
let set = Set(productIdArr)
|
||||
let productsRequest = SKProductsRequest(productIdentifiers: set)
|
||||
productsRequest.delegate = self
|
||||
productsRequest.start()
|
||||
|
||||
self.newTemplateModel = model
|
||||
completer?(model)
|
||||
}
|
||||
|
||||
// BRStoreAPI.requestPayTemplate(isToast: isToast) { [weak self] model in
|
||||
// guard let self = self else { return }
|
||||
// guard let model = model else {
|
||||
// if isLoding {
|
||||
// BRHUD.dismiss()
|
||||
// }
|
||||
// self.completerBlock?(nil)
|
||||
// return
|
||||
// }
|
||||
// self.oldTemplateModel = model
|
||||
//
|
||||
// var productIdArr: [String] = []
|
||||
// model.list_sub_vip?.forEach { item in
|
||||
// productIdArr.append(BRIAP.manager.getProductId(templateId: item.ios_template_id) ?? "")
|
||||
// }
|
||||
// model.list_coins?.forEach { item in
|
||||
// productIdArr.append(BRIAP.manager.getProductId(templateId: item.ios_template_id) ?? "")
|
||||
// }
|
||||
//
|
||||
// let set = Set(productIdArr)
|
||||
// let productsRequest = SKProductsRequest(productIdentifiers: set)
|
||||
// productsRequest.delegate = self
|
||||
// productsRequest.start()
|
||||
//
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
@ -96,6 +116,8 @@ extension BRPayDataRequest: SKProductsRequestDelegate {
|
||||
templateModel.list_coins = newCoinList
|
||||
templateModel.list_sub_vip = newVipList
|
||||
|
||||
self.newTemplateModel = templateModel
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.completerBlock?(templateModel)
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ class BRConsumptionRecordCell: BRCollectionViewCell {
|
||||
var model: BRConsumptionRecordsModel? {
|
||||
didSet {
|
||||
timeLabel.text = model?.created_at
|
||||
let episode = "EP.##".localizedReplace(text: "\(model?.episode ?? "0")") + "\(model?.name ?? "")"
|
||||
let episode = "EP.##".localizedReplace(text: "\(model?.episode ?? "0")") + " \(model?.name ?? "")"
|
||||
contentLabel.text = episode
|
||||
|
||||
coinView.setNeedsUpdateConfiguration()
|
||||
|
@ -11,18 +11,11 @@ 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)
|
||||
@ -43,12 +36,9 @@ class BRStoreCoinBigCell: BRStoreCoinCell {
|
||||
|
||||
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
|
||||
|
@ -29,6 +29,12 @@ class BRStoreCoinCell: BRCollectionViewCell {
|
||||
|
||||
unitLabel.text = item?.currency
|
||||
priceLabel.text = item?.price
|
||||
|
||||
if item?.corner_marker?.isEmpty == false {
|
||||
self.hotView.isHidden = false
|
||||
} else {
|
||||
self.hotView.isHidden = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,6 +91,11 @@ class BRStoreCoinCell: BRCollectionViewCell {
|
||||
return label
|
||||
}()
|
||||
|
||||
lazy var hotView: UIImageView = {
|
||||
let imageView = UIImageView(image: UIImage(named: "hot_icon_04"))
|
||||
return imageView
|
||||
}()
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
|
||||
@ -98,6 +109,7 @@ class BRStoreCoinCell: BRCollectionViewCell {
|
||||
priceBgView.addSubview(priceLabel)
|
||||
bgView.addSubview(sendRatioBgView)
|
||||
sendRatioBgView.addSubview(sendRatioLabel)
|
||||
bgView.addSubview(hotView)
|
||||
|
||||
bgView.snp.makeConstraints { make in
|
||||
make.edges.equalToSuperview()
|
||||
@ -141,6 +153,11 @@ class BRStoreCoinCell: BRCollectionViewCell {
|
||||
make.right.equalToSuperview().offset(-8)
|
||||
}
|
||||
|
||||
hotView.snp.makeConstraints { make in
|
||||
make.right.equalToSuperview().offset(-5)
|
||||
make.top.equalToSuperview().offset(4)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@MainActor required init?(coder: NSCoder) {
|
||||
|
@ -61,6 +61,12 @@ class BRStoreVipCell: BRCollectionViewCell {
|
||||
}
|
||||
}
|
||||
|
||||
var br_isSelected: Bool = false {
|
||||
didSet {
|
||||
selectedView.isHidden = !br_isSelected
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private lazy var bgView: UIImageView = {
|
||||
let view = UIImageView()
|
||||
@ -128,6 +134,11 @@ class BRStoreVipCell: BRCollectionViewCell {
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var selectedView: UIView = {
|
||||
let imageView = UIImageView(image: UIImage(named: "选中框"))
|
||||
return imageView
|
||||
}()
|
||||
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
@ -146,6 +157,7 @@ extension BRStoreVipCell {
|
||||
private func br_setupUI() {
|
||||
contentView.addSubview(bgView)
|
||||
contentView.addSubview(bgIconView)
|
||||
contentView.addSubview(selectedView)
|
||||
bgView.addSubview(vipIconView)
|
||||
bgView.addSubview(vipNameLabel)
|
||||
bgView.addSubview(unitLabel)
|
||||
@ -166,6 +178,10 @@ extension BRStoreVipCell {
|
||||
make.right.equalToSuperview().offset(-2)
|
||||
}
|
||||
|
||||
selectedView.snp.makeConstraints { make in
|
||||
make.edges.equalTo(bgView)
|
||||
}
|
||||
|
||||
vipIconView.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview().offset(11)
|
||||
make.top.equalToSuperview().offset(8)
|
||||
|
@ -20,6 +20,8 @@ class BRStoreVipView: UIView {
|
||||
var shortPlayId: String?
|
||||
var videoId: String?
|
||||
|
||||
private var selectedIndex: Int?
|
||||
|
||||
private lazy var titleLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.textColor = .colorFFFFFF()
|
||||
@ -101,10 +103,14 @@ extension BRStoreVipView: UICollectionViewDelegate, UICollectionViewDataSource {
|
||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! BRStoreVipCell
|
||||
cell.item = list[indexPath.row]
|
||||
cell.br_isSelected = indexPath.row == selectedIndex
|
||||
return cell
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
||||
self.selectedIndex = indexPath.row
|
||||
collectionView.reloadData()
|
||||
|
||||
let item = list[indexPath.row]
|
||||
|
||||
BRIAP.manager.start(model: item, shortPlayId: shortPlayId, videoId: videoId) { [weak self] finish in
|
||||
|
162
BeeReel/Class/Store/View/BRVipAlert.swift
Normal file
@ -0,0 +1,162 @@
|
||||
//
|
||||
// BRVipAlert.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/30.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRVipAlert: BRBaseAlert {
|
||||
|
||||
///上一次弹窗时间
|
||||
static var lastAlertDate: Date? = UserDefaults.standard.object(forKey: kBRVipAlertDateDefaultsKey) as? Date {
|
||||
didSet {
|
||||
UserDefaults.standard.set(lastAlertDate, forKey: kBRVipAlertDateDefaultsKey)
|
||||
UserDefaults.standard.synchronize()
|
||||
}
|
||||
}
|
||||
///是否允许展示提示框
|
||||
static var isAllowShowAlert: Bool {
|
||||
#if DEBUG
|
||||
return true
|
||||
#else
|
||||
guard let lastAlertDate = lastAlertDate else { return true }
|
||||
let nowDate = Date()
|
||||
|
||||
let interval = nowDate.timeIntervalSince1970 - lastAlertDate.timeIntervalSince1970
|
||||
|
||||
//一个小时弹出一次
|
||||
if interval > 60 * 60 {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
var listArr: [BRPayItem] = [] {
|
||||
didSet {
|
||||
self.collectionView.reloadData()
|
||||
}
|
||||
}
|
||||
|
||||
private var selectedIndex: Int?
|
||||
|
||||
private lazy var bgView: UIView = {
|
||||
let view = UIImageView(image: UIImage(named: "bg 4"))
|
||||
view.isUserInteractionEnabled = true
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var titleImageView: UIImageView = {
|
||||
let imageView = UIImageView(image: UIImage(named: "Go VIP Watch Everything"))
|
||||
return imageView
|
||||
}()
|
||||
|
||||
// private lazy var
|
||||
|
||||
private lazy var tipLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontBold(ofSize: 10)
|
||||
label.textColor = .colorC5ED8A()
|
||||
label.text = "kVipAlertTipText".localized
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
|
||||
let layout = UICollectionViewFlowLayout()
|
||||
layout.itemSize = .init(width: 240, height: 50)
|
||||
layout.minimumInteritemSpacing = 8
|
||||
layout.minimumLineSpacing = 8
|
||||
return layout
|
||||
}()
|
||||
|
||||
private lazy var collectionView: BRCollectionView = {
|
||||
let collectionView = BRCollectionView(frame: .zero, collectionViewLayout: collectionViewLayout)
|
||||
collectionView.addObserver(self, forKeyPath: "contentSize", context: nil)
|
||||
collectionView.delegate = self
|
||||
collectionView.dataSource = self
|
||||
collectionView.register(BRVipAlertCell.self, forCellWithReuseIdentifier: "cell")
|
||||
return collectionView
|
||||
}()
|
||||
|
||||
deinit {
|
||||
self.collectionView.removeObserver(self, forKeyPath: "contentSize")
|
||||
}
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
|
||||
br_setupUI()
|
||||
}
|
||||
|
||||
@MainActor 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" {
|
||||
collectionView.snp.updateConstraints { make in
|
||||
make.height.equalTo(collectionView.contentSize.height + 1)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension BRVipAlert {
|
||||
|
||||
private func br_setupUI() {
|
||||
contentView.addSubview(bgView)
|
||||
bgView.addSubview(titleImageView)
|
||||
bgView.addSubview(tipLabel)
|
||||
bgView.addSubview(collectionView)
|
||||
|
||||
bgView.snp.makeConstraints { make in
|
||||
make.left.right.top.equalToSuperview()
|
||||
make.bottom.equalToSuperview().offset(-70)
|
||||
make.width.equalTo(279)
|
||||
}
|
||||
|
||||
titleImageView.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview().offset(28)
|
||||
make.top.equalToSuperview().offset(49)
|
||||
}
|
||||
|
||||
tipLabel.snp.makeConstraints { make in
|
||||
make.centerX.equalToSuperview().offset(2)
|
||||
make.top.equalToSuperview().offset(132)
|
||||
}
|
||||
|
||||
collectionView.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview().offset(21)
|
||||
make.width.equalTo(collectionViewLayout.itemSize.width)
|
||||
make.top.equalToSuperview().offset(152)
|
||||
make.bottom.equalToSuperview().offset(-17)
|
||||
make.height.equalTo(1)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
extension BRVipAlert: UICollectionViewDelegate, UICollectionViewDataSource {
|
||||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! BRVipAlertCell
|
||||
cell.br_isSelected = indexPath.row == self.selectedIndex
|
||||
return cell
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||||
return 4
|
||||
}
|
||||
|
||||
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
||||
self.selectedIndex = indexPath.row
|
||||
self.collectionView.reloadData()
|
||||
}
|
||||
}
|
126
BeeReel/Class/Store/View/BRVipAlertCell.swift
Normal file
@ -0,0 +1,126 @@
|
||||
//
|
||||
// BRVipAlertCell.swift
|
||||
// BeeReel
|
||||
//
|
||||
// Created by 长沙鸿瑶 on 2025/7/30.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class BRVipAlertCell: BRCollectionViewCell {
|
||||
|
||||
var item: BRPayItem? {
|
||||
didSet {
|
||||
nameLabel.text = item?.title
|
||||
currencyLabel.text = item?.currency
|
||||
priceLabel.text = item?.price
|
||||
|
||||
switch item?.vip_type_key {
|
||||
case .week:
|
||||
bgView.image = UIImage(named: "bg-周")
|
||||
vipIconImageView.image = UIImage(named: "周")
|
||||
|
||||
|
||||
case .month:
|
||||
bgView.image = UIImage(named: "bg-月")
|
||||
vipIconImageView.image = UIImage(named: "月")
|
||||
|
||||
|
||||
case .quarter:
|
||||
bgView.image = UIImage(named: "bg-季")
|
||||
vipIconImageView.image = UIImage(named: "Frame 1")
|
||||
|
||||
case .year:
|
||||
bgView.image = UIImage(named: "bg-年")
|
||||
vipIconImageView.image = UIImage(named: "Frame 2")
|
||||
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var br_isSelected: Bool = false {
|
||||
didSet {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private lazy var bgView: UIImageView = {
|
||||
let view = UIImageView()
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var vipIconImageView: UIImageView = {
|
||||
let imageView = UIImageView()
|
||||
return imageView
|
||||
}()
|
||||
|
||||
private lazy var nameLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontMedium(ofSize: 12)
|
||||
label.textColor = .color495047()
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var currencyLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .fontRegular(ofSize: 12)
|
||||
label.textColor = .color2C042C()
|
||||
return label
|
||||
}()
|
||||
|
||||
private lazy var priceLabel: UILabel = {
|
||||
let label = UILabel()
|
||||
label.font = .aaHouDiHei(ofSize: 18)
|
||||
label.textColor = .color2C042C()
|
||||
return label
|
||||
}()
|
||||
|
||||
override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
|
||||
br_setupUI()
|
||||
}
|
||||
|
||||
@MainActor required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension BRVipAlertCell {
|
||||
|
||||
private func br_setupUI() {
|
||||
contentView.addSubview(bgView)
|
||||
contentView.addSubview(vipIconImageView)
|
||||
contentView.addSubview(nameLabel)
|
||||
contentView.addSubview(currencyLabel)
|
||||
contentView.addSubview(priceLabel)
|
||||
|
||||
bgView.snp.makeConstraints { make in
|
||||
make.edges.equalToSuperview()
|
||||
}
|
||||
|
||||
vipIconImageView.snp.makeConstraints { make in
|
||||
make.centerY.equalToSuperview()
|
||||
make.left.equalToSuperview().offset(12)
|
||||
}
|
||||
|
||||
nameLabel.snp.makeConstraints { make in
|
||||
make.centerY.equalToSuperview()
|
||||
make.left.equalTo(vipIconImageView.snp.right).offset(2)
|
||||
}
|
||||
|
||||
currencyLabel.snp.makeConstraints { make in
|
||||
make.left.equalToSuperview().offset(150)
|
||||
make.centerY.equalToSuperview()
|
||||
}
|
||||
|
||||
priceLabel.snp.makeConstraints { make in
|
||||
make.centerY.equalToSuperview()
|
||||
make.left.equalTo(currencyLabel.snp.right).offset(0)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -38,9 +38,10 @@ extension AppDelegate {
|
||||
UserDefaults.standard.set(Date(), forKey: kBRApnsAlertDefaultsKey)
|
||||
return
|
||||
}
|
||||
#if !DEBUG
|
||||
if date.br_isToday { return }
|
||||
|
||||
UserDefaults.standard.set(Date(), forKey: kBRApnsAlertDefaultsKey)
|
||||
#endif
|
||||
|
||||
let alert = BRAlert(title: "kApnsAlertTitle".localized, detail: "kApnsAlertContent".localized, image: UIImage(named: "通知"), normalButtonText: "Later".localized, highlightButtonText: "Allow".localized).show()
|
||||
alert.clickNormalButton = {
|
||||
@ -53,6 +54,14 @@ extension AppDelegate {
|
||||
|
||||
|
||||
}
|
||||
|
||||
func setBadgeCount(_ count: Int) {
|
||||
if #available(iOS 16.0, *) {
|
||||
UNUserNotificationCenter.current().setBadgeCount(count)
|
||||
} else {
|
||||
UIApplication.shared.applicationIconBadgeNumber = count
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: -------------- UNUserNotificationCenterDelegate --------------
|
||||
@ -72,11 +81,7 @@ extension AppDelegate: UNUserNotificationCenterDelegate {
|
||||
|
||||
///点击通知消息进入app
|
||||
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
|
||||
if #available(iOS 16.0, *) {
|
||||
UNUserNotificationCenter.current().setBadgeCount(0)
|
||||
} else {
|
||||
UIApplication.shared.applicationIconBadgeNumber = 0
|
||||
}
|
||||
setBadgeCount(0)
|
||||
|
||||
guard let userInfo: [String : Any] = response.notification.request.content.userInfo as? [String : Any] else {
|
||||
completionHandler()
|
||||
|
@ -25,6 +25,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
|
||||
requestAPNS()
|
||||
|
||||
setBadgeCount(0)
|
||||
|
||||
BRIAP.manager.restore(isLoding: false) { isFinish in
|
||||
guard isFinish else { return }
|
||||
BRLoginManager.manager.updateUserInfo(completer: nil)
|
||||
|
22
BeeReel/Sources/Assets.xcassets/icon/Frame 9.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 9.imageset/Frame@2x.png
vendored
Normal file
After Width: | Height: | Size: 473 B |
BIN
BeeReel/Sources/Assets.xcassets/icon/Frame 9.imageset/Frame@3x.png
vendored
Normal file
After Width: | Height: | Size: 655 B |
22
BeeReel/Sources/Assets.xcassets/icon/Go VIP Watch Everything.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "Go VIP Watch Everything@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "Go VIP Watch Everything@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/Go VIP Watch Everything.imageset/Go VIP Watch Everything@2x.png
vendored
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/Go VIP Watch Everything.imageset/Go VIP Watch Everything@3x.png
vendored
Normal file
After Width: | Height: | Size: 12 KiB |
44
BeeReel/Sources/Assets.xcassets/icon/bg 4.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "bg@2x.png",
|
||||
"idiom" : "universal",
|
||||
"resizing" : {
|
||||
"cap-insets" : {
|
||||
"bottom" : 78,
|
||||
"top" : 424
|
||||
},
|
||||
"center" : {
|
||||
"height" : 1,
|
||||
"mode" : "tile"
|
||||
},
|
||||
"mode" : "3-part-vertical"
|
||||
},
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "bg@3x.png",
|
||||
"idiom" : "universal",
|
||||
"resizing" : {
|
||||
"cap-insets" : {
|
||||
"bottom" : 102,
|
||||
"top" : 582
|
||||
},
|
||||
"center" : {
|
||||
"height" : 1,
|
||||
"mode" : "tile"
|
||||
},
|
||||
"mode" : "3-part-vertical"
|
||||
},
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/bg 4.imageset/bg@2x.png
vendored
Normal file
After Width: | Height: | Size: 189 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/bg 4.imageset/bg@3x.png
vendored
Normal file
After Width: | Height: | Size: 350 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/bg-周.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "bg-周@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "bg-周@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/bg-周.imageset/bg-周@2x.png
vendored
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/bg-周.imageset/bg-周@3x.png
vendored
Normal file
After Width: | Height: | Size: 85 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/bg-季.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "bg-季@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "bg-季@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/bg-季.imageset/bg-季@2x.png
vendored
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/bg-季.imageset/bg-季@3x.png
vendored
Normal file
After Width: | Height: | Size: 93 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/bg-年.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "bg-年@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "bg-年@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/bg-年.imageset/bg-年@2x.png
vendored
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/bg-年.imageset/bg-年@3x.png
vendored
Normal file
After Width: | Height: | Size: 93 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/bg-月.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"filename" : "bg-月@2x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"filename" : "bg-月@3x.png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
BeeReel/Sources/Assets.xcassets/icon/bg-月.imageset/bg-月@2x.png
vendored
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/bg-月.imageset/bg-月@3x.png
vendored
Normal file
After Width: | Height: | Size: 87 KiB |
22
BeeReel/Sources/Assets.xcassets/icon/placeholder_image_01.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/placeholder_image_01.imageset/占位图@2x.png
vendored
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/placeholder_image_01.imageset/占位图@3x.png
vendored
Normal file
After Width: | Height: | Size: 4.6 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: 2.5 KiB |
BIN
BeeReel/Sources/Assets.xcassets/icon/选中框.imageset/选中框@3x.png
vendored
Normal file
After Width: | Height: | Size: 3.9 KiB |
@ -524,6 +524,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"kVipAlertTipText" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "500+ DRAMAS WAITING"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"kVipTipText" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
@ -645,6 +656,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"No Short Found" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "No Short Found"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Order Record" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
|