TSThemeSetVC.swift 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. //
  2. // TSThemeSetVC.swift
  3. // AIRingtone
  4. //
  5. // Created by 100Years on 2025/3/3.
  6. //
  7. class TSThemeSetVC: TSBaseVC {
  8. var model:TSThemeModel
  9. var duration:Float
  10. var getNeedVip:Bool{
  11. if model.vip{
  12. return true
  13. }
  14. return false
  15. }
  16. lazy var audioPlayer = TSBusinessAudioPlayer{ [weak self] state in
  17. guard let self = self else { return }
  18. audioPlayerStateChange(state: state)
  19. }
  20. lazy var ringTool: TSBandRingTool = {
  21. let ringTool = TSBandRingTool(targetVC: self)
  22. return ringTool
  23. }()
  24. lazy var contactsTool: TSContactsTool = {
  25. let contactsTool = TSContactsTool(targetVC: self)
  26. return contactsTool
  27. }()
  28. lazy var ringView: TSThemeSetRingToneView = {
  29. let ringView = TSThemeSetRingToneView()
  30. ringView.moreInfoBtn.isHidden = true
  31. ringView.setBtn.addTarget(self, action: #selector(clickSetRing), for: .touchUpInside)
  32. ringView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(clickPlay)))
  33. return ringView
  34. }()
  35. lazy var posterView: TSThemeSetPosterView = {
  36. let posterView = TSThemeSetPosterView()
  37. posterView.setBtn.addTarget(self, action: #selector(clickSetPoster), for: .touchUpInside)
  38. posterView.moreInfoBtn.addTarget(self, action: #selector(clickSetMoreInfoPoster), for: .touchUpInside)
  39. return posterView
  40. }()
  41. lazy var photoView: TSThemeSetPhotorView = {
  42. let photoView = TSThemeSetPhotorView()
  43. photoView.setBtn.addTarget(self, action: #selector(clickPhoto), for: .touchUpInside)
  44. photoView.moreInfoBtn.addTarget(self, action: #selector(clickSetMoreInfoPhoto), for: .touchUpInside)
  45. return photoView
  46. }()
  47. lazy var stackView : TSCustomStackView = {
  48. let stackView = TSCustomStackView(axis: .vertical,spacing: 16)
  49. return stackView
  50. }()
  51. init(model: TSThemeModel, duration: Float) {
  52. self.model = model
  53. self.duration = duration
  54. super.init()
  55. }
  56. @MainActor required init?(coder: NSCoder) {
  57. fatalError("init(coder:) has not been implemented")
  58. }
  59. var avatarImage:UIImage?{
  60. return photoView.netWorkImageView.image
  61. }
  62. override func createView() {
  63. setViewBgImageNamed(named: kViewBJ)
  64. addNormalNavBarView()
  65. setPageTitle("Set Theme".localized)
  66. _ = setNavigationItem("", imageName: "tutorials", direction: .right, action: #selector(clickRight))
  67. contentView.addSubview(stackView)
  68. stackView.snp.makeConstraints { make in
  69. make.top.bottom.equalTo(0)
  70. make.leading.equalTo(16)
  71. make.trailing.equalTo(-16)
  72. }
  73. stackView.addSubviewToStack(ringView)
  74. stackView.addSubviewToStack(posterView)
  75. stackView.addSubviewToStack(photoView)
  76. }
  77. override func dealThings() {
  78. ringView.cellView.nameLab.text = model.ringtoneName
  79. ringView.cellView.setCoverImageView(urlString: model.ringtoneCover)
  80. ringView.cellView.timeLab.text = duration.floatToMinuteSecond()
  81. posterView.netWorkImageView.setAsyncImage(urlString: model.poster,contentMode: .scaleAspectFill)
  82. photoView.netWorkImageView.setAsyncImage(urlString: model.photo,contentMode: .scaleAspectFill)
  83. NotificationCenter.default.addObserver(self, selector: #selector(vipInfoChanged), name: .kPurchaseDidChanged, object: nil)
  84. setVipUI()
  85. }
  86. @objc func vipInfoChanged() {
  87. kExecuteOnMainThread {
  88. self.setVipUI()
  89. }
  90. }
  91. func setVipUI(){
  92. self.ringView.setBtn.setImage(getNeedVip ? UIImage(named: "vip_icon_white"): nil, for: .normal)
  93. self.posterView.setBtn.setImage(getNeedVip ? UIImage(named: "vip_icon_white"): nil, for: .normal)
  94. self.photoView.setBtn.setImage(getNeedVip ? UIImage(named: "vip_icon_white"): nil, for: .normal)
  95. }
  96. func audioPlayerStateChange(state:TSBusinessAudioPlayer.PlayerState){
  97. switch state {
  98. case .loading(let progress):
  99. if progress == 0.0 {
  100. ringView.cellView.isloading = true
  101. }else if progress == 1.0 {
  102. ringView.cellView.isloading = false
  103. }
  104. case .play:
  105. ringView.cellView.isPlay = true
  106. case .stop:
  107. ringView.cellView.isPlay = false
  108. default:
  109. break
  110. }
  111. }
  112. @objc func clickRight(){
  113. let browseVC = TSThemeTutorialsVC()
  114. kPushVC(target: self, modelVC: browseVC)
  115. }
  116. override func viewDidDisappear(_ animated: Bool) {
  117. super.viewDidDisappear(animated)
  118. audioPlayer.stop()
  119. }
  120. }
  121. extension TSThemeSetVC {
  122. @objc func clickPlay(){
  123. if audioPlayer.isPlaying{
  124. audioPlayer.stop()
  125. }else{
  126. audioPlayer.playRingtone(ringtone: model.ringtone)
  127. }
  128. }
  129. @objc func clickSetRing(){
  130. audioPlayer.stop()
  131. if kPurchaseToolShared.kJudgeVip(externalBool: getNeedVip, vc: self){ return }//判断 vip
  132. ringTool.shareBand(with: model.ringtone, fileName: model.name) { success in
  133. }
  134. }
  135. @objc func clickSetPoster(){
  136. if kPurchaseToolShared.kJudgeVip(externalBool: getNeedVip, vc: self){ return }//判断 vip
  137. if let image = posterView.netWorkImageView.image{
  138. PhotoManagerShared.saveImageToAlbum(image) { success, error in
  139. if success {
  140. kSavePhotoSuccesswShared.show(atView: self.view)
  141. }else{
  142. debugPrint(error)
  143. }
  144. }
  145. }else{
  146. kShowToastDataMissing()
  147. }
  148. }
  149. @objc func clickPhoto(){
  150. if kPurchaseToolShared.kJudgeVip(externalBool: getNeedVip, vc: self){ return }//判断 vip
  151. guard let photo = avatarImage else { return }
  152. contactsTool.setContactsAvatar(avatarImage: photo) { data, error in
  153. if error == nil {
  154. kSavePhotoSuccesswShared.show(atView: self.view,showViewBtn: false)
  155. }
  156. }
  157. }
  158. @objc func clickSetMoreInfoPoster(){
  159. kPresentModalVC(target: self, modelVC: TSTutorialPopupVC(selectedIndex: 0),transitionStyle: .crossDissolve)
  160. }
  161. @objc func clickSetMoreInfoPhoto(){
  162. kPresentModalVC(target: self, modelVC: TSTutorialPopupVC(selectedIndex: 1),transitionStyle: .crossDissolve)
  163. }
  164. }