ASAppBtnView.swift 5.3 KB

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