TSBaseVC.swift 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. //
  2. // TSBaseVC.swift
  3. // TSLiveWallpaper
  4. //
  5. // Created by 100Years on 2024/12/20.
  6. //
  7. import UIKit
  8. import Combine
  9. open class TSBaseVC: UIViewController {
  10. public var closePageComplete:(()->Void)?
  11. public var cancellable: [AnyCancellable] = []
  12. public lazy var contentView: UIView = {
  13. let view = UIView()
  14. return view
  15. }()
  16. public lazy var navBarContentView: UIView = {
  17. let view = UIView()
  18. view.backgroundColor = .clear
  19. return view
  20. }()
  21. public lazy var normalNavBarView: TSNormalNavigationBarView = {
  22. let view = TSNormalNavigationBarView()
  23. return view
  24. }()
  25. public lazy var viewBgImageView: UIImageView = {
  26. let view = UIImageView()
  27. view.backgroundColor = .clear
  28. return view
  29. }()
  30. public lazy var netWorkView: UIView = {
  31. let view = UIView()
  32. view.backgroundColor = .clear
  33. return view
  34. }()
  35. public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
  36. super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
  37. }
  38. required public init?(coder: NSCoder) {
  39. super.init(coder: coder)
  40. }
  41. /// 提供一个无参数的默认初始化方法
  42. public init() {
  43. super.init(nibName: nil, bundle: nil)
  44. }
  45. open override func viewDidLoad() {
  46. super.viewDidLoad()
  47. setupSuperSomeView()
  48. createData()
  49. createView()
  50. dealThings()
  51. }
  52. private func setupSuperSomeView() {
  53. edgesForExtendedLayout = [.all]
  54. view.addSubview(contentView)
  55. view.addSubview(navBarContentView)
  56. contentView.snp.makeConstraints { make in
  57. make.top.equalTo(k_Nav_Height)
  58. make.leading.trailing.bottom.equalToSuperview()
  59. }
  60. navBarContentView.snp.makeConstraints { make in
  61. make.leading.top.trailing.equalToSuperview()
  62. make.height.equalTo(k_Nav_Height)
  63. }
  64. view.backgroundColor = .mainBg
  65. view.layoutIfNeeded()
  66. }
  67. public func setViewBgImageNamed(named:String){
  68. if viewBgImageView.superview == nil {
  69. view.insertSubview(viewBgImageView, at: 0)
  70. viewBgImageView.snp.makeConstraints { make in
  71. make.edges.equalToSuperview()
  72. }
  73. }
  74. viewBgImageView.image = UIImage(named: named)
  75. }
  76. //子类重写
  77. open func createData(){
  78. }
  79. open func createView(){
  80. }
  81. open func dealThings(){
  82. }
  83. public func addNormalNavBarView(){
  84. if normalNavBarView.superview != nil { return }
  85. navBarContentView.addSubview(normalNavBarView)
  86. normalNavBarView.snp.makeConstraints { make in
  87. make.edges.equalToSuperview()
  88. }
  89. }
  90. open override func viewWillAppear(_ animated: Bool) {
  91. debugPrint("进入------>\(String(describing: type(of: self)))")
  92. }
  93. deinit {
  94. NotificationCenter.default.removeObserver(self)
  95. cancellable.removeAll()
  96. closePageComplete?()
  97. debugPrint("♻️♻️♻️ TGRootViewController -> \(type(of: self)) deinit ♻️♻️♻️")
  98. }
  99. // MARK: - 导航栏方法
  100. public func setTitleText(_ title: String) {
  101. addNormalNavBarView()
  102. _ = normalNavBarView.setTitleName(NSLocalizedString(title, comment: ""))
  103. }
  104. public func setPageTitle(_ title: String) {
  105. let pageTitle = title
  106. let backTitle = " "
  107. setTitleText(title)
  108. _ = setNavigationItem("", imageName: "navi_back", direction: .left, action: #selector(navBarClickLeftAction))
  109. }
  110. public func setNavigationItem(_ name: String, imageName: String, direction: NSTextAlignment, action: Selector) -> UIButton {
  111. if direction == .left {
  112. return normalNavBarView.setLeftNavigationItem(name: name, imageName: imageName, target: self, action: action)
  113. } else {
  114. return normalNavBarView.setRightNavigationItem(name: name, imageName: imageName, target: self, action: action)
  115. }
  116. }
  117. @objc open func navBarClickLeftAction() {
  118. debugPrint("navBarClickLeftAction -> \(type(of: self))")
  119. pop()
  120. }
  121. @objc public func pop() {
  122. if navigationController == nil {
  123. dismiss(animated: true, completion: nil)
  124. } else if navigationController?.presentingViewController != nil, navigationController?.viewControllers.count == 1 {
  125. navigationController?.dismiss(animated: true, completion: nil)
  126. } else {
  127. navigationController?.popViewController(animated: true)
  128. }
  129. }
  130. }
  131. extension TSBaseVC {
  132. public func setNavBarViewHidden(_ isHidden: Bool) {
  133. navBarContentView.snp.updateConstraints { make in
  134. make.height.equalTo(isHidden ? 0 : k_Nav_Height)
  135. }
  136. contentView.snp.updateConstraints { make in
  137. make.top.equalTo(isHidden ? 0 : k_Nav_Height)
  138. }
  139. }
  140. public var isViewVisible: Bool {
  141. return isViewLoaded && view.window != nil && presentedViewController == nil
  142. }
  143. public func addPullDownClosePage() {
  144. let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handleDismissPan(_:)))
  145. view.addGestureRecognizer(panGesture)
  146. }
  147. // 手势处理方法
  148. @objc public func handleDismissPan(_ gesture: UIPanGestureRecognizer) {
  149. let translation = gesture.translation(in: view)
  150. let progress = translation.y / view.bounds.height
  151. switch gesture.state {
  152. case .changed:
  153. view.transform = CGAffineTransform(translationX: 0, y: max(0, translation.y))
  154. case .ended:
  155. if progress > 0.5 || gesture.velocity(in: view).y > 1000 {
  156. dismiss(animated: true)
  157. } else {
  158. UIView.animate(withDuration: 0.3) {
  159. self.view.transform = .identity
  160. }
  161. }
  162. default:
  163. break
  164. }
  165. }
  166. }