TSAppBtnView.swift 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. //
  2. // TSAppBtnView.swift
  3. // AIEmoji
  4. //
  5. // Created by 100Years on 2025/4/23.
  6. //
  7. class TSAppBtn: UIButton {
  8. }
  9. class TSNormalSubmitBtn: TSAppBtn {
  10. // override var isEnabled: Bool {
  11. // didSet {
  12. // // 根据 isEnabled 的值设置 alpha
  13. // self.alpha = isEnabled ? 1.0 : 0.6
  14. // }
  15. // }
  16. }
  17. class TSNormalCancelBtn: TSAppBtn {
  18. }
  19. class TSAppBtnView: TSBaseView {
  20. enum ViewStyle {
  21. case generate //创造类的按钮
  22. }
  23. var viewH:CGFloat = 64
  24. var style:ViewStyle = .generate
  25. var vipFreeNumType:VipFreeNumType = .none{
  26. didSet{
  27. updateVipView()
  28. }
  29. }
  30. var clickBlock:(()->Void)?
  31. var btnFrame:CGRect?
  32. var isIconVipBlock:(()->Bool)? //vip 图片显示
  33. var isClickVipBlock:(()->Bool)? //点击是,是否需要弹出 vip
  34. var loading:Bool = false{
  35. willSet {
  36. if loading != newValue {
  37. loadingAnimation(loading: newValue)
  38. if loading == false {
  39. self.resetBtnText()
  40. }
  41. }
  42. }
  43. }
  44. //###################################### Button ######################################
  45. var button:UIButton = UIButton()
  46. var title:String = ""
  47. override func creatUI() {
  48. }
  49. override func dealThings(){
  50. }
  51. func setUpButton(style:ViewStyle,vipFreeNumType:VipFreeNumType = .none,btnFrame:CGRect? = nil,clickBlock: @escaping () -> Void) {
  52. self.btnFrame = btnFrame
  53. self.style = style
  54. self.vipFreeNumType = vipFreeNumType
  55. self.clickBlock = clickBlock
  56. contentView.removeAllSubViews()
  57. switch style {
  58. case .generate:
  59. title = "Generate".localized
  60. setUpGenerate()
  61. launchVipLogic()
  62. }
  63. }
  64. func setLoadingText(text:String?){
  65. if loading {
  66. button.setTitle(text, for: .normal)
  67. }else{
  68. resetBtnText()
  69. }
  70. }
  71. func resetBtnText(){
  72. button.setTitle(title, for: .normal)
  73. }
  74. }
  75. extension TSAppBtnView{
  76. func launchVipLogic(){
  77. //监听 Vip 变化
  78. NotificationCenter.default.addObserver(forName: .kPurchaseDidChanged, object: nil, queue: OperationQueue.main) { [weak self] notification in
  79. guard let self = self else { return }
  80. updateVipView()
  81. }
  82. NotificationCenter.default.addObserver(forName: .kVipFreeNumChanged, object: nil, queue: OperationQueue.main) { [weak self] notification in
  83. guard let self = self else { return }
  84. if let userInfo = notification.userInfo as? [String: VipFreeNumType], let myEnum = userInfo["VipFreeNumType"] {
  85. if myEnum == self.vipFreeNumType {
  86. self.updateVipView()
  87. }
  88. }
  89. }
  90. updateVipView()
  91. }
  92. func updateVipView() {
  93. switch style {
  94. case .generate:
  95. setVip(vip: isIconVipBlock?() ?? false)
  96. }
  97. }
  98. func setBtnEnabled(isEnabled:Bool) {
  99. button.isEnabled = isEnabled
  100. // button.alpha = isEnabled ? 1.0 : 0.6
  101. }
  102. var isEnabled:Bool{
  103. return button.isEnabled
  104. }
  105. func setVip(vip:Bool) {
  106. if loading { //loading,正在显示转圈动画
  107. return
  108. }
  109. if vip {
  110. button.setImage(UIImage(named: "btnImage_vip"), for: .normal)
  111. }else{
  112. button.setImage(nil, for: .normal)
  113. }
  114. }
  115. }
  116. //创造按钮
  117. extension TSAppBtnView{
  118. func setUpGenerate() {
  119. button = kCreateNormalSubmitBtn(
  120. title: title,
  121. frame: CGRectMake(0, 0, k_ScreenWidth - 32, 48),
  122. action: { [weak self] in
  123. guard let self = self else { return }
  124. if let vc = WindowHelper.getCurrentViewController() {
  125. if kJudgeVip(externalBool: isClickVipBlock?() ?? false, vc: vc) { return } //判断 vip
  126. }
  127. clickBlock?()
  128. })
  129. contentView.addSubview(button)
  130. button.snp.makeConstraints { make in
  131. make.center.equalToSuperview()
  132. make.width.equalTo(button.width)
  133. make.height.equalTo(button.height)
  134. }
  135. viewH = 48
  136. }
  137. }
  138. //创造按钮
  139. extension TSAppBtnView{
  140. private func loadingAnimation(loading:Bool) {
  141. if loading {
  142. button.setImage(UIImage(named: "generated_loading"), for: .normal)
  143. self.button.imageView?.startRotating()
  144. }else {
  145. button.imageView?.stopRotating()
  146. updateVipView()
  147. }
  148. }
  149. }
  150. //常用提交按钮
  151. func kCreateNormalSubmitBtn(title:String,frame:CGRect,action: (() -> Void)? = nil) -> UIButton {
  152. let btn = TSNormalSubmitBtn()
  153. btn.frame = frame
  154. btn.setUpButton(title:title,font: UIFont.font(size: 16,weight: .medium),titleColor:.black,corner: frame.height/2,action: action)
  155. btn.setTitleImageSpace(spacing: 8)
  156. var buttonBgImage = UIImage(named: "submit_btn_bg")!
  157. buttonBgImage = buttonBgImage.resizableImage(withCapInsets: UIEdgeInsets(top:24, left: 24, bottom: 24, right: 24), resizingMode: .stretch)
  158. btn.setBackgroundImage(buttonBgImage, for: .normal)
  159. var buttonDisBgImage = UIImage(named: "submit_btn_dis_bg")!
  160. buttonDisBgImage = buttonDisBgImage.resizableImage(withCapInsets: UIEdgeInsets(top:24, left: 24, bottom: 24, right: 24), resizingMode: .stretch)
  161. btn.setBackgroundImage(buttonDisBgImage, for: .disabled)
  162. return btn
  163. }