TSButton.swift 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. //
  2. // TSButton.swift
  3. // AIRingtone
  4. //
  5. // Created by 100Years on 2025/3/13.
  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. ////常用取消按钮
  20. //func kCreateNormalCancelBtn(title:String, action: (() -> Void)? = nil) -> UIButton {
  21. // let btn = UIButton.createButton(title:title,backgroundColor: .fromHex("#FFFFFF", alpha: 0.4),font: UIFont.font(size: 14,weight: .medium),titleColor:.white,corner: 30,action: action)
  22. // return btn
  23. //}
  24. ////常用确定按钮
  25. //func kCreateNormalConfirmBtn(title:String, action: (() -> Void)? = nil) -> UIButton {
  26. // let btn = UIButton.createButton(title:title,backgroundImage:UIImage(named: "submit_btn_small_bg"),font: UIFont.font(size: 14,weight: .medium),titleColor:.white,corner: 30,action: action)
  27. // return btn
  28. //}
  29. class TSAppBtnView: TSBaseView {
  30. enum ViewStyle {
  31. case normal
  32. case generate //创造类的按钮
  33. case themeSet //主题页设置按钮
  34. case normalSet //普通的设置按钮
  35. case normalBorder //普通的边框
  36. }
  37. var viewH:CGFloat = 64
  38. var style:ViewStyle = .normal
  39. var vipFreeNumType:VipFreeNumType = .none{
  40. didSet{
  41. updateVipView()
  42. }
  43. }
  44. var clickBlock:(()->Void)?
  45. var btnFrame:CGRect?
  46. //###################################### Button ######################################
  47. var button:UIButton = UIButton()
  48. override func creatUI() {
  49. }
  50. override func dealThings(){
  51. }
  52. func setUpButton(style:ViewStyle,vipFreeNumType:VipFreeNumType = .none,btnFrame:CGRect? = nil,clickBlock: @escaping () -> Void) {
  53. self.btnFrame = btnFrame
  54. self.style = style
  55. self.vipFreeNumType = vipFreeNumType
  56. self.clickBlock = clickBlock
  57. contentView.removeAllSubViews()
  58. switch style {
  59. case .generate:
  60. setUpGenerate()
  61. launchVipLogic()
  62. case .themeSet:
  63. setUpThemeSet()
  64. case .normalSet:
  65. setUpNormalSet()
  66. case .normalBorder:
  67. setUpNormalBorder()
  68. default:
  69. break
  70. }
  71. }
  72. }
  73. extension TSAppBtnView{
  74. func launchVipLogic(){
  75. //监听 Vip 变化
  76. NotificationCenter.default.addObserver(forName: .kPurchaseDidChanged, object: nil, queue: OperationQueue.main) { [weak self] notification in
  77. guard let self = self else { return }
  78. updateVipView()
  79. }
  80. NotificationCenter.default.addObserver(forName: .kVipFreeNumChanged, object: nil, queue: OperationQueue.main) { [weak self] notification in
  81. guard let self = self else { return }
  82. if let userInfo = notification.userInfo as? [String: VipFreeNumType], let myEnum = userInfo["VipFreeNumType"] {
  83. if myEnum == self.vipFreeNumType {
  84. self.updateVipView()
  85. }
  86. }
  87. }
  88. updateVipView()
  89. }
  90. func updateVipView() {
  91. switch style {
  92. case .generate:
  93. setVip(vip: kPurchaseToolShared.generateVipShow(type: self.vipFreeNumType))
  94. default:
  95. break
  96. }
  97. }
  98. func setBtnEnabled(isEnabled:Bool) {
  99. button.isEnabled = isEnabled
  100. button.alpha = isEnabled ? 1.0 : 0.6
  101. }
  102. func setVip(vip:Bool) {
  103. if vip {
  104. button.setImage(UIImage(named: "vip_icon_white"), for: .normal)
  105. }else{
  106. button.setImage(nil, for: .normal)
  107. }
  108. }
  109. }
  110. //创造按钮
  111. extension TSAppBtnView{
  112. func setUpGenerate() {
  113. button = kCreateNormalSubmitBtn(
  114. title: "Create Now".localized,
  115. frame: CGRectMake(0, 0, k_ScreenWidth - 32, 48),
  116. action: { [weak self] in
  117. guard let self = self else { return }
  118. if let vc = WindowHelper.getCurrentViewController() {
  119. if kPurchaseToolShared.kJudgeVipFreeType(vipFreeNumType: vipFreeNumType, vc: vc){ return }
  120. }
  121. clickBlock?()
  122. })
  123. contentView.addSubview(button)
  124. button.snp.makeConstraints { make in
  125. make.center.equalToSuperview()
  126. make.width.equalTo(button.width)
  127. make.height.equalTo(button.height)
  128. }
  129. viewH = 64
  130. }
  131. func setUpThemeSet() {
  132. button = kCreateNormalSubmitBtn(title: "Set Now".localized, frame: self.btnFrame ?? CGRectMake(0, 0, 200, 48),action: { [weak self] in
  133. guard let self = self else { return }
  134. clickBlock?()
  135. })
  136. contentView.addSubview(button)
  137. button.snp.makeConstraints { make in
  138. make.center.equalToSuperview()
  139. make.width.equalTo(button.width)
  140. make.height.equalTo(button.height)
  141. }
  142. }
  143. func setUpNormalSet() {
  144. let frame = self.btnFrame ?? CGRectMake(0, 0, 233, 48)
  145. button = kCreateNormalSubmitBtn(title: "Set Now".localized, frame: frame,action: { [weak self] in
  146. guard let self = self else { return }
  147. clickBlock?()
  148. })
  149. button.titleLabel?.numberOfLines = 3
  150. contentView.addSubview(button)
  151. button.snp.makeConstraints { make in
  152. make.center.equalToSuperview()
  153. make.width.equalTo(button.width)
  154. make.height.equalTo(button.height)
  155. }
  156. }
  157. func setUpNormalBorder() {
  158. let textColor = UIColor.themeColor
  159. let frame = self.btnFrame ?? CGRectMake(0, 0, 98, 48)
  160. button = UIButton.createButton(backgroundColor: "#171717".uiColor,font: UIFont.font(size: 16,weight: .regular),titleColor:textColor,corner: frame.size.height/2){ [weak self] in
  161. guard let self = self else { return }
  162. clickBlock?()
  163. }
  164. button.frame = frame
  165. button.layer.borderWidth = 1
  166. button.layer.borderColor = textColor.cgColor
  167. contentView.addSubview(button)
  168. button.snp.makeConstraints { make in
  169. make.center.equalToSuperview()
  170. make.width.equalTo(button.width)
  171. make.height.equalTo(button.height)
  172. }
  173. }
  174. }
  175. //创造按钮
  176. extension TSAppBtnView{
  177. func loadingAnimation(loading:Bool) {
  178. if loading {
  179. button.setImage(UIImage(named: "generated_loading"), for: .normal)
  180. button.imageView?.startRotating()
  181. }else {
  182. button.imageView?.stopRotating()
  183. updateVipView()
  184. }
  185. }
  186. }
  187. //常用提交按钮
  188. func kCreateNormalSubmitBtn(title:String,frame:CGRect,action: (() -> Void)? = nil) -> UIButton {
  189. let btn = TSNormalSubmitBtn()
  190. btn.frame = frame
  191. btn.setUpButton(title:title,font: UIFont.font(size: 16,weight: .regular),titleColor:.white,corner: frame.height/2,action: action)
  192. btn.setTitleImageSpace(spacing: 4)
  193. btn.addGradientBg(colors: ["#E961F6".uiColor.cgColor,"#7E57F4".uiColor.cgColor])
  194. return btn
  195. }