bug修复 1.0.1发布

This commit is contained in:
zjx 2025-06-10 18:21:00 +08:00
parent b018486f21
commit 689d38261f
27 changed files with 141 additions and 34 deletions

View File

@ -1607,7 +1607,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0.1;
PRODUCT_BUNDLE_IDENTIFIER = com.qjwl168.veloria.ios; PRODUCT_BUNDLE_IDENTIFIER = com.qjwl168.veloria.ios;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@ -1648,7 +1648,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0.1;
PRODUCT_BUNDLE_IDENTIFIER = com.qjwl168.veloria.ios; PRODUCT_BUNDLE_IDENTIFIER = com.qjwl168.veloria.ios;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";

View File

@ -35,6 +35,7 @@ class VPHomeListViewController: VPViewController, WMZPageProtocol {
collectionView.vp_addRefreshBackFooter(insetBottom: 0) { [weak self] in collectionView.vp_addRefreshBackFooter(insetBottom: 0) { [weak self] in
self?.handleFooterRefresh(nil) self?.handleFooterRefresh(nil)
} }
collectionView.vp_addNormalEmpty()
collectionView.register(VPHomeListCell.self, forCellWithReuseIdentifier: "cell") collectionView.register(VPHomeListCell.self, forCellWithReuseIdentifier: "cell")
return collectionView return collectionView
}() }()

View File

@ -168,6 +168,10 @@ extension VPMeViewController: UITableViewDelegate, UITableViewDataSource {
let vc = VPFeedbackViewController() let vc = VPFeedbackViewController()
self.navigationController?.pushViewController(vc, animated: true) self.navigationController?.pushViewController(vc, animated: true)
case .orderRecord:
let vc = VPWalletViewController()
self.navigationController?.pushViewController(vc, animated: true)
default: default:
break break
} }
@ -204,15 +208,16 @@ extension VPMeViewController {
] ]
var cellArr: [VPMeItem] = [] var cellArr: [VPMeItem] = []
cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_07"), title: "Order Record".localized, type: .orderRecord, cellKey: .normal))
// cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_05"), title: "Language".localized, type: .language, cellKey: .normal)) // cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_05"), title: "Language".localized, type: .language, cellKey: .normal))
if VPLoginManager.manager.userInfo?.is_tourist == false {
cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_06"), title: "Delete Account".localized, type: .deleteAccount, cellKey: .normal))
}
cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_01"), title: "Privacy Policy".localized, type: .privacyPolicy, cellKey: .normal)) cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_01"), title: "Privacy Policy".localized, type: .privacyPolicy, cellKey: .normal))
cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_02"), title: "User Agreement".localized, type: .userAgreement, cellKey: .normal)) cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_02"), title: "User Agreement".localized, type: .userAgreement, cellKey: .normal))
cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_04"), title: "Help Center".localized, type: .feedback, cellKey: .normal)) cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_04"), title: "Feedback".localized, type: .feedback, cellKey: .normal))
cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_03"), title: "About Us".localized, type: .aboutUs, cellKey: .normal)) cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_03"), title: "About Us".localized, type: .aboutUs, cellKey: .normal))
if VPLoginManager.manager.userInfo?.is_tourist == false {
cellArr.append(VPMeItem(icon: UIImage(named: "me_item_icon_06"), title: "Delet Account".localized, type: .deleteAccount, cellKey: .normal))
}
dataArr.append(cellArr) dataArr.append(cellArr)

View File

@ -14,6 +14,7 @@ struct VPMeItem {
case aboutUs case aboutUs
case feedback case feedback
case deleteAccount case deleteAccount
case orderRecord
case informationProtection case informationProtection
case civizatioConvention case civizatioConvention
case informationSharing case informationSharing

View File

@ -94,7 +94,7 @@ extension VPMeUserInfoCell {
contentView.addSubview(avatarImageView) contentView.addSubview(avatarImageView)
contentView.addSubview(nicknameLabel) contentView.addSubview(nicknameLabel)
contentView.addSubview(idLabel) contentView.addSubview(idLabel)
contentView.addSubview(loginButton) // contentView.addSubview(loginButton)
avatarImageView.snp.makeConstraints { make in avatarImageView.snp.makeConstraints { make in
make.left.equalToSuperview() make.left.equalToSuperview()
@ -114,11 +114,11 @@ extension VPMeUserInfoCell {
make.bottom.equalTo(avatarImageView).offset(-3) make.bottom.equalTo(avatarImageView).offset(-3)
} }
loginButton.snp.makeConstraints { make in // loginButton.snp.makeConstraints { make in
make.centerY.equalTo(avatarImageView) // make.centerY.equalTo(avatarImageView)
make.right.equalToSuperview() // make.right.equalToSuperview()
make.height.equalTo(34) // make.height.equalTo(34)
} // }
} }

View File

@ -190,7 +190,7 @@ class VPVideoPlayerViewController: VPViewController {
CATransaction.setCompletionBlock { [weak self] in CATransaction.setCompletionBlock { [weak self] in
guard let self = self else { return } guard let self = self else { return }
if !animated { if !animated {
if self.currentIndexPath != indexPath { if self.currentIndexPath != indexPath, indexPath.row < self.getDataCount() {
self.skip(indexPath: indexPath) self.skip(indexPath: indexPath)
} else { } else {
self.play() self.play()

View File

@ -47,7 +47,7 @@ class VPShortModel: VPModel, SmartCodable {
static func mappingForKey() -> [SmartKeyTransformer]? { static func mappingForKey() -> [SmartKeyTransformer]? {
return [ return [
CodingKeys.vp_description <--- ["description"], CodingKeys.vp_description <--- ["description", "short_video_description"],
CodingKeys.name <--- ["short_video_title", "name"] CodingKeys.name <--- ["short_video_title", "name"]
] ]
} }

View File

@ -20,7 +20,7 @@ class VPPlayerCoinBuyView: UIView {
var videoId: String? var videoId: String?
var buyFinishBlock: (() -> Void)? var buyFinishBlock: (() -> Void)?
private lazy var selectedIndex = 0 private var selectedIndex: Int?
private lazy var collectionViewLayout: UICollectionViewFlowLayout = { private lazy var collectionViewLayout: UICollectionViewFlowLayout = {

View File

@ -20,7 +20,7 @@ class VPPlayerVipBuyView: UIView {
var buyFinishBlock: (() -> Void)? var buyFinishBlock: (() -> Void)?
private lazy var currentIndex: Int = 0 private var currentIndex: Int?
private lazy var collectionViewLayout: UICollectionViewFlowLayout = { private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
let layout = UICollectionViewFlowLayout() let layout = UICollectionViewFlowLayout()

View File

@ -95,8 +95,6 @@ class VPVideoPlayerCell: VPCollectionViewCell, VPPlayerProtocol {
didSet { didSet {
controlView.isCurrent = isCurrent controlView.isCurrent = isCurrent
if !isCurrent { if !isCurrent {
// self.player.replay()
// self.player.seekToTime(toTime: 0)
self.coverImageView.isHidden = false self.coverImageView.isHidden = false
} }
} }
@ -210,6 +208,7 @@ extension VPVideoPlayerCell: VPPlayerDelegate {
func vp_playerReadyToPlay(_ player: VPPlayer) { func vp_playerReadyToPlay(_ player: VPPlayer) {
self.seekToTime(toTime: (videoInfo?.play_seconds ?? 0) / 1000) self.seekToTime(toTime: (videoInfo?.play_seconds ?? 0) / 1000)
player.rate = self.viewModel?.rateModel.rate.getRate() ?? 1
} }
private func updateCoverShowState() { private func updateCoverShowState() {

View File

@ -201,11 +201,27 @@ extension VPVideoPlayerControlView {
} }
@objc private func handleCollectButton() { @objc private func handleCollectButton() {
guard let shortPlayId = self.videoInfo?.short_play_id else { return }
guard let videoId = self.videoInfo?.short_play_video_id else { return }
let isCollect = !(self.shortModel?.is_collect ?? false) let isCollect = !(self.shortModel?.is_collect ?? false)
if isCollect {
self.collectShort(isCollect: isCollect)
} else {
let alert = VPAlertView(title: "kUnFavoritesAlertTitle".localized, subtitle: "kUnFavoritesAlertText".localized, icon: UIImage(named: "alert_icon_03"), normalButtonText: nil, highlightButtonText: "Confirm".localized)
alert.show()
alert.clickHighlightButton = { [weak self] in
self?.collectShort(isCollect: isCollect)
}
}
}
private func collectShort(isCollect: Bool) {
guard let shortPlayId = self.videoInfo?.short_play_id else { return }
guard let videoId = self.videoInfo?.short_play_video_id else { return }
VPVideoAPI.requestCollectShort(isCollect: isCollect, shortPlayId: shortPlayId, videoId: videoId) { [weak self] in VPVideoAPI.requestCollectShort(isCollect: isCollect, shortPlayId: shortPlayId, videoId: videoId) { [weak self] in
guard let self = self else { return } guard let self = self else { return }
var count = self.shortModel?.collect_total ?? 0 var count = self.shortModel?.collect_total ?? 0

View File

@ -16,7 +16,7 @@ class VPCoinsViewController: VPViewController {
} }
} }
private lazy var selectedIndex = 0 private var selectedIndex: Int?
//MARK: UI //MARK: UI
private lazy var scrollView: UIScrollView = { private lazy var scrollView: UIScrollView = {

View File

@ -29,6 +29,7 @@ class VPGiveCoinRecordsViewController: VPViewController {
tableView.vp_addRefreshBackFooter(insetBottom: tableView.contentInset.bottom) { [weak self] in tableView.vp_addRefreshBackFooter(insetBottom: tableView.contentInset.bottom) { [weak self] in
self?.handleFooterRefresh(nil) self?.handleFooterRefresh(nil)
} }
tableView.vp_addNormalEmpty()
tableView.register(VPGiveCoinRecordsCell.self, forCellReuseIdentifier: "cell") tableView.register(VPGiveCoinRecordsCell.self, forCellReuseIdentifier: "cell")
return tableView return tableView
}() }()

View File

@ -16,7 +16,7 @@ class VPVipViewController: VPViewController {
} }
} }
private lazy var currentIndex: Int = 0 private var currentIndex: Int?
private lazy var scrollView: UIScrollView = { private lazy var scrollView: UIScrollView = {
let scrollView = VPScrollView() let scrollView = VPScrollView()

View File

@ -13,6 +13,7 @@ class VPCoinRecordCell: VPWalletBaseCell {
didSet { didSet {
coinCountLabel.text = "+\(model?.value ?? "0")" coinCountLabel.text = "+\(model?.value ?? "0")"
timeLabel.text = model?.created_at timeLabel.text = model?.created_at
titleLabel.text = model?.type
} }
} }
@ -21,7 +22,7 @@ class VPCoinRecordCell: VPWalletBaseCell {
let label = UILabel() let label = UILabel()
label.font = .fontRegular(ofSize: 14) label.font = .fontRegular(ofSize: 14)
label.textColor = .colorFFFFFF(alpha: 0.9) label.textColor = .colorFFFFFF(alpha: 0.9)
label.text = "Recharge Coins".localized
return label return label
}() }()

View File

@ -23,11 +23,15 @@ class VPCoinsBuyCell: VPCollectionViewCell {
if let sendCoins = item?.send_coins, sendCoins > 0, let coins = item?.coins { if let sendCoins = item?.send_coins, sendCoins > 0, let coins = item?.coins {
sendBgView.isHidden = false sendBgView.isHidden = false
sendCountLabel.isHidden = false
sendCountLabel.text = String(format: "kBonusCoinCount".localized, "\(sendCoins)")
let percent = CGFloat(sendCoins) / CGFloat(coins) * 100 let percent = CGFloat(sendCoins) / CGFloat(coins) * 100
sendLabel.text = String(format: "+%.0f%%".localized, percent) sendLabel.text = String(format: "+%.0f%%".localized, percent)
} else { } else {
sendBgView.isHidden = true sendBgView.isHidden = true
sendCountLabel.isHidden = true
} }
} }
} }
@ -59,6 +63,11 @@ class VPCoinsBuyCell: VPCollectionViewCell {
return imageView return imageView
}() }()
private lazy var coinBgView: UIView = {
let view = UIView()
return view
}()
private lazy var coinCountLabel: UILabel = { private lazy var coinCountLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .fontMedium(ofSize: 16) label.font = .fontMedium(ofSize: 16)
@ -71,6 +80,13 @@ class VPCoinsBuyCell: VPCollectionViewCell {
return imageView return imageView
}() }()
private lazy var sendCountLabel: UILabel = {
let label = UILabel()
label.font = .fontRegular(ofSize: 12)
label.textColor = .color05CEA0()
return label
}()
private lazy var priceLabel: UILabel = { private lazy var priceLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.font = .fontRegular(ofSize: 12) label.font = .fontRegular(ofSize: 12)
@ -131,8 +147,10 @@ extension VPCoinsBuyCell {
private func vp_setupUI() { private func vp_setupUI() {
contentView.addSubview(bgView) contentView.addSubview(bgView)
contentView.addSubview(selectedImageView) contentView.addSubview(selectedImageView)
contentView.addSubview(coinCountLabel) contentView.addSubview(coinBgView)
contentView.addSubview(iconImageView) coinBgView.addSubview(coinCountLabel)
coinBgView.addSubview(iconImageView)
contentView.addSubview(sendCountLabel)
contentView.addSubview(priceLabel) contentView.addSubview(priceLabel)
contentView.addSubview(hotBgView) contentView.addSubview(hotBgView)
hotBgView.addSubview(hotLabel) hotBgView.addSubview(hotLabel)
@ -148,14 +166,26 @@ extension VPCoinsBuyCell {
make.bottom.right.equalToSuperview() make.bottom.right.equalToSuperview()
} }
coinCountLabel.snp.makeConstraints { make in coinBgView.snp.makeConstraints { make in
make.centerX.equalToSuperview() make.centerX.equalToSuperview()
make.top.equalToSuperview().offset(22) make.top.equalToSuperview().offset(28)
}
coinCountLabel.snp.makeConstraints { make in
make.left.equalToSuperview()
make.centerY.equalToSuperview()
}
sendCountLabel.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.top.equalTo(coinBgView.snp.bottom).offset(8)
} }
iconImageView.snp.makeConstraints { make in iconImageView.snp.makeConstraints { make in
make.centerX.equalToSuperview() make.left.equalTo(coinCountLabel.snp.right).offset(3)
make.top.equalToSuperview().offset(45) make.right.equalToSuperview()
make.centerY.equalToSuperview()
make.top.equalToSuperview()
} }
priceLabel.snp.makeConstraints { make in priceLabel.snp.makeConstraints { make in

View File

@ -13,6 +13,7 @@ class VPVIPRecordCell: VPWalletBaseCell {
didSet { didSet {
dayLabel.text = model?.value dayLabel.text = model?.value
timeLabel.text = model?.created_at timeLabel.text = model?.created_at
titleLabel.text = model?.type
} }
} }

View File

@ -180,6 +180,8 @@ extension VPIAPManager: JXIAPManagerDelegate {
if code == .noProduct { if code == .noProduct {
VPToast.show(text: "kIapErrorToast02".localized) VPToast.show(text: "kIapErrorToast02".localized)
} else if code == .cancelled {
VPToast.show(text: "kIapErrorToast04".localized)
} }
self.completionHandler?(false) self.completionHandler?(false)
} }

View 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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

View 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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

View File

@ -31,7 +31,6 @@
"Explicit List of Personal Information Collection" = "Explicit List of Personal Information Collection"; "Explicit List of Personal Information Collection" = "Explicit List of Personal Information Collection";
"About Us" = "About Us"; "About Us" = "About Us";
"Visitor" = "Visitor"; "Visitor" = "Visitor";
"Help Center" = "Help Center";
"Feedback History" = "Feedback History"; "Feedback History" = "Feedback History";
"Feedback" = "Feedback"; "Feedback" = "Feedback";
"Feedback Details" = "Feedback Details"; "Feedback Details" = "Feedback Details";
@ -73,7 +72,7 @@
"Login with Facebook" = "Login with Facebook"; "Login with Facebook" = "Login with Facebook";
"Log In" = "Log In"; "Log In" = "Log In";
"Sign Out" = "Sign Out"; "Sign Out" = "Sign Out";
"Delet Account" = "Delet Account"; "Delete Account" = "Delete Account";
"Account Deletion" = "Account Deletion"; "Account Deletion" = "Account Deletion";
"Delete Account" = "Delete Account"; "Delete Account" = "Delete Account";
"Delete Forever" = "Delete Forever"; "Delete Forever" = "Delete Forever";
@ -89,13 +88,17 @@
"Restore" = "Restore"; "Restore" = "Restore";
"Watch Now" = "Watch Now"; "Watch Now" = "Watch Now";
"More" = "More"; "More" = "More";
"Confirm" = "Confirm";
"Order Record" = "Order Record";
"kBonusCoinCount" = "+%@ Bonus";
"kEmptyTitle01" = "Nothing Here Yet"; "kEmptyTitle01" = "Nothing Here Yet";
"kEmptyDes01" = "Start exploring and add something!"; "kEmptyDes01" = "Start exploring and add something!";
"kEmptyTitle02" = "Not Found"; "kEmptyTitle02" = "Not Found";
"kEmptyDes02" = "Sorry, we couldn't find anything."; "kEmptyDes02" = "Sorry, we couldn't find anything.";
"kDetailRecommandTitle" = "Picked Just for You"; "kDetailRecommandTitle" = "Picked Just for You";
"kHomeTitleText" = "10,000+ addictive shorts await!"; "kHomeTitleText" = "10,000+ Addictive Shorts Await!";
"kSearchPlaceholderText1" = "Search dramas"; "kSearchPlaceholderText1" = "Search dramas";
"kSearchPlaceholderText2" = "#Recersal of fate"; "kSearchPlaceholderText2" = "#Recersal of fate";
"kHomeMenuTitle" = "Select Categories"; "kHomeMenuTitle" = "Select Categories";
@ -123,6 +126,7 @@
"kIapErrorToast02" = "Invalid in-app purchase"; "kIapErrorToast02" = "Invalid in-app purchase";
///没有可恢复购买 ///没有可恢复购买
"kIapErrorToast03" = "There are no in-app purchases to restore."; "kIapErrorToast03" = "There are no in-app purchases to restore.";
"kIapErrorToast04" = "Payment has been cancelled.";
///请购买上一集 ///请购买上一集
"kUnlockVideoErrorToast01" = "The prequel to this series is not unlocked. Please unlock the prequel before unlocking this series"; "kUnlockVideoErrorToast01" = "The prequel to this series is not unlocked. Please unlock the prequel before unlocking this series";
@ -132,13 +136,15 @@
2. Gold coins will never expire, the reward coins will expire 24 hours a day. 2. Gold coins will never expire, the reward coins will expire 24 hours a day.
3. Coins will be used first when unlocking episodes. If the amount is insufficient, reward coins will automatically be used. 3. Coins will be used first when unlocking episodes. If the amount is insufficient, reward coins will automatically be used.
4. The purchase has not been credited, click <Restore> to refresh. 4. The purchase has not been credited, click <Restore> to refresh.
5. For other questions, contact us via Profile>Help &feedback."; 5. For other questions, contact us via Me>Feedback.";
//请选择需要删除的短剧 //请选择需要删除的短剧
"kToastText1" = "Please select the short plays that need to be deleted"; "kToastText1" = "Please select the short plays that need to be deleted";
"kDeleteAccountAlertTitle" = "Confirm Account Deletion"; "kDeleteAccountAlertTitle" = "Confirm Account Deletion";
"kDeleteAccountAlertText" = "This action cannot be undone."; "kDeleteAccountAlertText" = "This action cannot be undone.";
"kUnFavoritesAlertTitle" = "UnFavorites";
"kUnFavoritesAlertText" = "You may not find this collection after you uncollect it";
"kLogoutAlertTitle" = "Ready to Leave?"; "kLogoutAlertTitle" = "Ready to Leave?";
"kLogoutAlertText" = "when you sign out, your watch history will not be synced to your account."; "kLogoutAlertText" = "when you sign out, your watch history will not be synced to your account.";