1. 优化首页语言的播放效果

2. 优化首页收藏行为后,收藏列表的更新效果
3. 修复充值时的 crash
This commit is contained in:
eggmanQQQ
2024-07-17 15:38:37 +08:00
parent 5e097ba6f9
commit 157b67e5e0
4 changed files with 112 additions and 84 deletions

View File

@@ -182,10 +182,18 @@ class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol {
} }
let userInfoView:HomeVoiceUserInfoView = HomeVoiceUserInfoView.init(frame: .zero) let userInfoView:HomeVoiceUserInfoView = HomeVoiceUserInfoView.init(frame: .zero)
userInfoView.clickBtnBlock = {[weak self] (type,uid) in userInfoView.clickBtnBlock = {[weak self] (type,uid) in
guard let self else {
return
}
let session = NIMSession(uid, type: .P2P) let session = NIMSession(uid, type: .P2P)
let chatVC = ChatVC.init(session: session) let chatVC = ChatVC.init(session: session)
self?.navigationController?.pushViewController(chatVC, animated: true) self.navigationController?.pushViewController(chatVC, animated: true)
}
userInfoView.followActionBlock = { [weak self] (isFollow, value) in
guard let self else {
return
}
self.requestFansListData()
} }
userInfoView.model = model userInfoView.model = model
userInfoView.type = 0 userInfoView.type = 0

View File

@@ -10,14 +10,24 @@ import Nuke
typealias ClickPublishBlock = ()->Void typealias ClickPublishBlock = ()->Void
typealias PlayVoiceEndBlock = ()->Void
class HomeVoicePublishView: UIView { class HomeVoicePublishView: UIView {
var clickPublishBlock:ClickPublishBlock? var clickPublishBlock:ClickPublishBlock?
var playVoiceEndBlock:PlayVoiceEndBlock?
var currentAngle: CGFloat = 0.0
override init(frame: CGRect) { override init(frame: CGRect) {
super.init(frame: frame) super.init(frame: frame)
setUILayout() setUILayout()
loadSVGA()
let tap = UITapGestureRecognizer(target: self, action: #selector(publishViewAction))
publishView.addGestureRecognizer(tap)
} }
func setUILayout(){ func setUILayout(){
addSubview(backgroundView) addSubview(backgroundView)
addSubview(discView) addSubview(discView)
@@ -56,42 +66,69 @@ class HomeVoicePublishView: UIView {
make.height.equalTo(52) make.height.equalTo(52)
make.right.equalTo(-20) make.right.equalTo(-20)
} }
}
func loadSVGA() {
discParser.parse(withNamed: "RecordPlayer", in: Bundle.main) {[weak self] videoItem in discParser.parse(withNamed: "RecordPlayer", in: Bundle.main) {[weak self] videoItem in
guard let self else {
self?.discView.videoItem = videoItem return
self?.discView.loops = 100000; }
self?.discView.clearsAfterStop = false self.discView.videoItem = videoItem
self.discView.loops = 100000;
self.discView.clearsAfterStop = false
} failureBlock: { error in } failureBlock: { error in
} }
publishParser.parse(withNamed: "PublishVoice", in: Bundle.main) {[weak self] videoItem in publishParser.parse(withNamed: "PublishVoice", in: Bundle.main) {[weak self] videoItem in
guard let self else {
self?.publishView.videoItem = videoItem return
self?.publishView.loops = 100000; }
self?.publishView.startAnimation() self.publishView.videoItem = videoItem
self.publishView.loops = 100000;
self.publishView.startAnimation()
} failureBlock: { error in } failureBlock: { error in
} }
let tap = UITapGestureRecognizer(target: self, action: #selector(publishViewAction))
publishView.addGestureRecognizer(tap)
} }
required init?(coder: NSCoder) { required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
@objc func publishViewAction(){ @objc func publishViewAction(){
guard let _clickPublishBlock = self.clickPublishBlock else { guard let _clickPublishBlock = self.clickPublishBlock else {
return return
} }
_clickPublishBlock() _clickPublishBlock()
if playBtn.isSelected{ if playBtn.isSelected {
discView.stopAnimation() discView.stopAnimation()
playBtn.isSelected = false playBtn.isSelected = false
PlayVoiceManager.shared.stopPlayVoice() PlayVoiceManager.shared.stopPlayVoice()
} }
} }
func playAvatarAnimation() {
let rotation = CABasicAnimation(keyPath: "transform.rotation")
rotation.fromValue = currentAngle
rotation.toValue = currentAngle + Double.pi * 2
rotation.duration = 4
rotation.repeatCount = Float.infinity
avatarView.layer.add(rotation, forKey: "rotationAnimation")
}
func stopAvatarAnimation() {
if let presentationLayer = avatarView.layer.presentation() {
let currentTransform = presentationLayer.transform
//
avatarView.layer.removeAnimation(forKey: "rotationAnimation")
//
avatarView.layer.transform = currentTransform
currentAngle = atan2(currentTransform.m12, currentTransform.m11)
} else {
avatarView.layer.removeAnimation(forKey: "rotationAnimation")
}
}
@objc func playBtnAction(){ @objc func playBtnAction(){
guard let _model = self.model else { guard let _model = self.model else {
HUDTool.show(with: "把头像拖至唱片机才可播放") HUDTool.show(with: "把头像拖至唱片机才可播放")
@@ -101,9 +138,11 @@ class HomeVoicePublishView: UIView {
if (self.playBtn.isSelected){ if (self.playBtn.isSelected){
discView.startAnimation() discView.startAnimation()
PlayVoiceManager.shared.downloadVoice(url: _model.userVoice) PlayVoiceManager.shared.downloadVoice(url: _model.userVoice)
playAvatarAnimation()
return return
} }
discView.stopAnimation() discView.stopAnimation()
stopAvatarAnimation()
PlayVoiceManager.shared.stopPlayVoice() PlayVoiceManager.shared.stopPlayVoice()
} }
@@ -111,6 +150,7 @@ class HomeVoicePublishView: UIView {
avatarView.image = nil avatarView.image = nil
model = nil model = nil
discView.stopAnimation() discView.stopAnimation()
stopAvatarAnimation()
PlayVoiceManager.shared.stopPlayVoice() PlayVoiceManager.shared.stopPlayVoice()
} }
@@ -173,6 +213,7 @@ class HomeVoicePublishView: UIView {
} }
Nuke.loadImage(with: _model.avatar, into:avatarView) Nuke.loadImage(with: _model.avatar, into:avatarView)
discView.startAnimation() discView.startAnimation()
playAvatarAnimation()
PlayVoiceManager.shared.downloadVoice(url: _model.userVoice) PlayVoiceManager.shared.downloadVoice(url: _model.userVoice)
playBtn.isSelected = true playBtn.isSelected = true
} }

View File

@@ -19,8 +19,10 @@ class UserPayViewController: BaseViewController, HiddenNavigationBarProtocol{
} }
func requestData(){ func requestData(){
RequestGet(path: "chargeprod/list", parma: ["channelType":"8"]) { data in RequestGet(path: "chargeprod/list", parma: ["channelType":"8"]) { [weak self] data in
guard let self else {
return
}
if let list = Deserialized<UserPayViewModel>.toArray(with: data) { if let list = Deserialized<UserPayViewModel>.toArray(with: data) {
for (i,view) in self.viewList.enumerated() { for (i,view) in self.viewList.enumerated() {
if i < list.count{ if i < list.count{
@@ -31,15 +33,15 @@ class UserPayViewController: BaseViewController, HiddenNavigationBarProtocol{
}else{ }else{
view.isHidden = true view.isHidden = true
} }
} }
} }
} fail: { code, data in } fail: { code, data in
print(code) print(code)
} }
RequestGet(path: "purse/query", parma: ["channelType":"8"]) { data in RequestGet(path: "purse/query", parma: ["channelType":"8"]) { [weak self] data in
guard let self else {
return
}
if let model = Deserialized<UserPayViewModel>.toModel(with: data) { if let model = Deserialized<UserPayViewModel>.toModel(with: data) {
self.pricView.text = model.diamonds self.pricView.text = model.diamonds
} }
@@ -160,6 +162,7 @@ class UserPayViewController: BaseViewController, HiddenNavigationBarProtocol{
let y = publishBtn.y + publishBtn.frame.height let y = publishBtn.y + publishBtn.frame.height
self.scrollView.contentSize = CGSize(width: ScreenWidth, height: y) self.scrollView.contentSize = CGSize(width: ScreenWidth, height: y)
} }
@objc func publishBtnAction(){ @objc func publishBtnAction(){
guard let chargeProdId = self.chooseModel?.chargeProdId else{ guard let chargeProdId = self.chooseModel?.chargeProdId else{
return return
@@ -169,65 +172,65 @@ class UserPayViewController: BaseViewController, HiddenNavigationBarProtocol{
let ticket = AuthManager.ticket let ticket = AuthManager.ticket
let deviceInfo = UIDevice.current.identifierForVendor?.uuidString ?? "" let deviceInfo = UIDevice.current.identifierForVendor?.uuidString ?? ""
let clientIp = "0.0.0.0" let clientIp = "0.0.0.0"
RequestPost(path: "storeKitV2/placeOrder", parma: ["chargeProdId":chargeProdId,"uid":uid,"ticket":ticket,"deviceInfo":deviceInfo]) { data in RequestPost(path: "storeKitV2/placeOrder", parma: ["chargeProdId":chargeProdId,"uid":uid,"ticket":ticket,"deviceInfo":deviceInfo]) { [weak self] data in
guard let self else {
return
}
if let _data = data as? [String:Any],let recordId = _data["recordId"] as? String,let appAccountToken = _data["appAccountToken"] as? String{ if let _data = data as? [String:Any],let recordId = _data["recordId"] as? String,let appAccountToken = _data["appAccountToken"] as? String{
self.initiatePaymentAction(recordId: recordId, appAccountToken: appAccountToken) self.initiatePaymentAction(recordId: recordId, appAccountToken: appAccountToken)
}else{ }else{
HUDTool.show(with: "购买失败") HUDTool.show(with: "购买失败")
MBProgressHUD.hide(for: keyWindow, animated: true) MBProgressHUD.hide(for: keyWindow, animated: true)
} }
} fail: { code, data in } fail: { code, data in
HUDTool.show(with: data) HUDTool.show(with: data)
MBProgressHUD.hide(for: keyWindow, animated: true) MBProgressHUD.hide(for: keyWindow, animated: true)
} }
} }
deinit{ deinit{
NotificationCenter.default.removeObserver(self) NotificationCenter.default.removeObserver(self)
} }
func initiatePaymentAction(recordId:String,appAccountToken:String) { func initiatePaymentAction(recordId:String,appAccountToken:String) {
self.orderId = recordId self.orderId = recordId
if #available(iOS 15.0, *) { if #available(iOS 15.0, *) {
UserPayViewManager.shared._ConditionBlock = {[weak self] (state , result) in UserPayViewManager.shared._ConditionBlock = {[weak self] (state , result) in
if state == .Pay || state == .Start || state == .VerifiedServer{ guard let self else {
ScreenWidth return
}else if state == .Unowned{
HUDTool.show(with: "出现未知错误,请重新尝试")
MBProgressHUD.hide(for: keyWindow , animated: true)
}else{
HUDTool.show(with: "购买失败")
MBProgressHUD.hide(for: keyWindow, animated: true)
} }
if state == .VerifiedServer{ DispatchQueue.main.async {
if state == .Pay || state == .Start || state == .VerifiedServer{
// ScreenWidth
if let data = result,let transactionId = data["transactionId"]{ }else if state == .Unowned{
self?.paySuccess(transactionId:"\(transactionId)") HUDTool.show(with: "出现未知错误,请重新尝试")
MBProgressHUD.hide(for: keyWindow , animated: true)
}else{ }else{
HUDTool.show(with: "购买失败") HUDTool.show(with: "购买失败")
MBProgressHUD.hide(for: keyWindow, animated: true) MBProgressHUD.hide(for: keyWindow, animated: true)
} }
if state == .VerifiedServer{
if let data = result,let transactionId = data["transactionId"]{
self.paySuccess(transactionId:"\(transactionId)")
}else{
HUDTool.show(with: "购买失败")
MBProgressHUD.hide(for: keyWindow, animated: true)
}
}
} }
} }
Task { Task {
do { do {
try await UserPayViewManager.shared._demandCommodityThing(productId: self.chooseModel?.chargeProdId ?? "", uuid: appAccountToken) try await UserPayViewManager.shared._demandCommodityThing(productId: self.chooseModel?.chargeProdId ?? "", uuid: appAccountToken)
}catch{ }catch{
} }
} }
} else { } else {
HUDTool.show(with: "充值失败。当前仅支持运行iOS15及以上系统的手机进行充值请升级系统版本后重试。") HUDTool.show(with: "充值失败。当前仅支持运行iOS15及以上系统的手机进行充值请升级系统版本后重试。")
} }
} }
func paySuccess(transactionId:String){ func paySuccess(transactionId:String){
let uid = "\(AuthManager.userUid)" let uid = "\(AuthManager.userUid)"
let ticket = AuthManager.ticket let ticket = AuthManager.ticket
@@ -236,33 +239,28 @@ class UserPayViewController: BaseViewController, HiddenNavigationBarProtocol{
if #available(iOS 15.0, *) { if #available(iOS 15.0, *) {
Task { Task {
try await UserPayViewManager.shared._verifyBusinessAccomplish(transaction: transactionId) await UserPayViewManager.shared._verifyBusinessAccomplish(transaction: transactionId)
self.orderId = "" self.orderId = ""
RequestGet(path: "purse/query", parma: ["channelType":"8"]) { data in RequestGet(path: "purse/query", parma: ["channelType":"8"]) { [weak self] data in
guard let self else {
return
}
if let model = Deserialized<UserPayViewModel>.toModel(with: data) { if let model = Deserialized<UserPayViewModel>.toModel(with: data) {
self.pricView.text = model.diamonds self.pricView.text = model.diamonds
} }
} fail: { code, data in } fail: { code, data in
print(code) print(code)
} }
} }
} }
} fail: { code, data in } fail: { code, data in
if code == 1444{ if code == 1444{
Task { Task {
if #available(iOS 15.0, *) { if #available(iOS 15.0, *) {
try await UserPayViewManager.shared._verifyBusinessAccomplish(transaction: transactionId) await UserPayViewManager.shared._verifyBusinessAccomplish(transaction: transactionId)
} else { } else {
// Fallback on earlier versions // Fallback on earlier versions
} }
} }
} }
HUDTool.show(with: data) HUDTool.show(with: data)

View File

@@ -15,28 +15,20 @@ class PlanetStarVC: BaseViewController,HiddenNavigationBarProtocol {
super.viewDidLoad() super.viewDidLoad()
yin_initUI() yin_initUI()
requestData() requestData()
} }
func requestData(){ func requestData(){
RequestGet(path: "home/recommendUsers", parma: ["pageNum":"\(self.page)","pageSize":"60"]) { data in RequestGet(path: "home/recommendUsers", parma: ["pageNum":"\(self.page)","pageSize":"60"]) { data in
if let list = Deserialized<PlanetStarModel>.toArray(with: data) { if let list = Deserialized<PlanetStarModel>.toArray(with: data) {
var dataList:[PlanetStarModel] = [] var dataList:[PlanetStarModel] = []
guard list.isEmpty else { guard list.isEmpty else {
for i in 0..<12 { for i in 0..<12 {
if i < list.count{ if i < list.count{
dataList.append(list[i]) dataList.append(list[i])
} }
} }
self.dataArray = dataList self.dataArray = dataList
self.dealWithViewData() self.dealWithViewData()
return return
} }
self.page = 1 self.page = 1
@@ -52,19 +44,13 @@ class PlanetStarVC: BaseViewController,HiddenNavigationBarProtocol {
} fail: { code, data in } fail: { code, data in
} }
} }
func dealWithViewData(){ func dealWithViewData(){
self.bgRadiusView.dataList = dataArray self.bgRadiusView.dataList = dataArray
} }
private func yin_initUI(){ private func yin_initUI(){
view.addSubview(backgroundView) view.addSubview(backgroundView)
view.addSubview(bgRadiusView) view.addSubview(bgRadiusView)
bgRadiusView.frame = self.view.frame bgRadiusView.frame = self.view.frame
@@ -74,7 +60,6 @@ class PlanetStarVC: BaseViewController,HiddenNavigationBarProtocol {
make.edges.equalTo(self.view) make.edges.equalTo(self.view)
} }
bgRadiusView.refreshBlcok = {[weak self] (uid,type,name) in bgRadiusView.refreshBlcok = {[weak self] (uid,type,name) in
if type == 0{ if type == 0{
self?.page = (self?.page ?? 1) + 1 self?.page = (self?.page ?? 1) + 1
@@ -123,6 +108,7 @@ class PlanetStarVC: BaseViewController,HiddenNavigationBarProtocol {
} }
return return
} }
let popUpView = PlanetStarPopUpView.init(frame: CGRect(x: 0, y: 0, width: ScreenWidth, height: ScreenHeight)) let popUpView = PlanetStarPopUpView.init(frame: CGRect(x: 0, y: 0, width: ScreenWidth, height: ScreenHeight))
self?.view.addSubview(popUpView) self?.view.addSubview(popUpView)
popUpView.textView.text = text popUpView.textView.text = text
@@ -159,14 +145,10 @@ class PlanetStarVC: BaseViewController,HiddenNavigationBarProtocol {
} }
} }
} }
} }
} }
} }
func showPayVC(){ func showPayVC(){
let popUpView = PlanetStarPopUpView.init(frame: CGRect(x: 0, y: 0, width: ScreenWidth, height: ScreenHeight)) let popUpView = PlanetStarPopUpView.init(frame: CGRect(x: 0, y: 0, width: ScreenWidth, height: ScreenHeight))
self.view.addSubview(popUpView) self.view.addSubview(popUpView)
@@ -178,8 +160,8 @@ class PlanetStarVC: BaseViewController,HiddenNavigationBarProtocol {
let vc = UserPayViewController() let vc = UserPayViewController()
self?.navigationController?.pushViewController(vc, animated: true) self?.navigationController?.pushViewController(vc, animated: true)
} }
} }
let activityView:UIActivityIndicatorView = UIActivityIndicatorView(style: .medium) let activityView:UIActivityIndicatorView = UIActivityIndicatorView(style: .medium)
var giftModel:PlanetStarModel? var giftModel:PlanetStarModel?
private lazy var backgroundView:UIImageView = { private lazy var backgroundView:UIImageView = {
@@ -188,6 +170,7 @@ class PlanetStarVC: BaseViewController,HiddenNavigationBarProtocol {
_backgroundView.isUserInteractionEnabled = true _backgroundView.isUserInteractionEnabled = true
return _backgroundView return _backgroundView
}() }()
private var bgRadiusView:PlanetStarClickItemView = { private var bgRadiusView:PlanetStarClickItemView = {
let _bgRadiusView = PlanetStarClickItemView.init(frame: CGRect(x: 0, y: 0, width: ScreenWidth , height: ScreenHeight)) let _bgRadiusView = PlanetStarClickItemView.init(frame: CGRect(x: 0, y: 0, width: ScreenWidth , height: ScreenHeight))
@@ -196,8 +179,6 @@ class PlanetStarVC: BaseViewController,HiddenNavigationBarProtocol {
}() }()
private var dataArray:[PlanetStarModel] = [] private var dataArray:[PlanetStarModel] = []
} }