PQBaseViewController.swift 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. //
  2. // PQBaseViewController.swift
  3. // PQSpeed
  4. //
  5. // Created by SanW on 2020/5/25.
  6. // Copyright © 2020 BytesFlow. All rights reserved.
  7. //
  8. // import MediaPlayer
  9. import Alamofire
  10. import NXFramework_Swift
  11. import UIKit
  12. public class PQBaseViewController: UIViewController, UIGestureRecognizerDelegate {
  13. // 侧滑拦截返回
  14. public var popGestureHandle: (() -> Void)?
  15. public var naviTitle: String? // 标题
  16. public var rightButton: UIButton? // 右边按钮
  17. public var backButton: UIButton? // 左边按钮
  18. public var navTitleLabel: UILabel? // 标题
  19. public var navHeadImageView: UIImageView? // 导航条
  20. public var lineView: UIView? // 导航分隔线
  21. public var isHiddenStatus: Bool = false { // 更新状态栏
  22. didSet {
  23. setNeedsStatusBarAppearanceUpdate()
  24. }
  25. }
  26. public lazy var manager: NetworkReachabilityManager? = {
  27. let manager = NetworkReachabilityManager(host: "www.baidu.com")
  28. manager?.listener = { status in
  29. if status == .reachable(.wwan) || status == .reachable(.ethernetOrWiFi) {}
  30. }
  31. return manager
  32. }()
  33. override public func viewDidLoad() {
  34. super.viewDidLoad()
  35. navigationController?.isNavigationBarHidden = true
  36. view.backgroundColor = UIColor.black
  37. navHeadImageView = UIImageView(image: UIImage())
  38. navHeadImageView?.isUserInteractionEnabled = true
  39. navHeadImageView?.backgroundColor = UIColor.black
  40. navHeadImageView?.frame = CGRect(x: 0, y: 0, width: cScreenWidth, height: cDevice_iPhoneNavBarAndStatusBarHei)
  41. view.addSubview(navHeadImageView!)
  42. lineView = UIView(frame: CGRect(x: 0, y: (navHeadImageView?.frame.maxY ?? cDevice_iPhoneNavBarAndStatusBarHei) - 0.5, width: cScreenWidth, height: 0.5))
  43. lineView?.backgroundColor = UIColor.black
  44. view.addSubview(lineView!)
  45. UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
  46. automaticallyAdjustsScrollViewInsets = false
  47. navigationController?.interactivePopGestureRecognizer?.delegate = self
  48. fd_prefersNavigationBarHidden = true
  49. }
  50. public func hiddenNavigation() {
  51. navHeadImageView?.isHidden = true
  52. lineView?.isHidden = true
  53. }
  54. func showNavigation() {
  55. if navHeadImageView != nil {
  56. navHeadImageView?.isHidden = false
  57. lineView?.isHidden = false
  58. view.bringSubviewToFront(navHeadImageView!)
  59. }
  60. }
  61. public func leftBackButton() {
  62. leftButton(image: "icon_detail_back")
  63. }
  64. func leftButton(image: String?,tintColor:UIColor? = nil) {
  65. let leftButton = UIButton(type: .custom)
  66. leftButton.frame = CGRect(x: 0, y: cDevice_iPhoneStatusBarHei, width: cDefaultMargin * 4, height: cDefaultMargin * 4)
  67. leftButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: -5, right: 0)
  68. if tintColor != nil {
  69. leftButton.tintColor = tintColor
  70. leftButton.setImage(UIImage().BF_Image(named: image ?? "icon_detail_back").withRenderingMode(.alwaysTemplate), for: .normal)
  71. }else{
  72. leftButton.setImage(UIImage().BF_Image(named: image ?? "icon_detail_back"), for: .normal)
  73. }
  74. leftButton.addTarget(self, action: #selector(backBtnClick), for: .touchUpInside)
  75. navHeadImageView?.addSubview(leftButton)
  76. backButton = leftButton
  77. }
  78. func rightButtonItem(image: String?, title: String?) {
  79. let rightButtonItem = UIButton(type: .custom)
  80. var rightW: CGFloat = cDefaultMargin
  81. if title != nil, title?.count ?? 0 > 0 {
  82. rightW = rightW + sizeWithText(text: title ?? "", font: UIFont.systemFont(ofSize: 16), size: CGSize(width: CGFloat.greatestFiniteMagnitude, height: cDefaultMargin * 4)).width
  83. rightButtonItem.setTitle(title, for: .normal)
  84. rightButtonItem.setTitleColor(UIColor.hexColor(hexadecimal: "#242F44"), for: .normal)
  85. rightButtonItem.titleLabel?.font = UIFont.systemFont(ofSize: 16)
  86. }
  87. if image != nil, image?.count ?? 0 > 0 {
  88. rightW = rightW + cDefaultMargin * 4
  89. rightButtonItem.setImage(UIImage(named: image ?? ""), for: .normal)
  90. rightButtonItem.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: (title != nil && title?.count ?? 0 > 0) ? 0 : -5, right: 0)
  91. }
  92. rightButtonItem.adjustsImageWhenHighlighted = false
  93. rightButtonItem.frame = CGRect(x: cScreenWidth - rightW, y: cDevice_iPhoneStatusBarHei, width: rightW, height: cDefaultMargin * 4)
  94. rightButtonItem.addTarget(self, action: #selector(rightBtnClick(sender:)), for: .touchUpInside)
  95. rightButtonItem.contentHorizontalAlignment = .center
  96. navHeadImageView?.addSubview(rightButtonItem)
  97. rightButton = rightButtonItem
  98. }
  99. func setTitle(title: String?, color: UIColor = UIColor.white) {
  100. naviTitle = title
  101. if navTitleLabel == nil {
  102. let titleLabel = UILabel(frame: CGRect(x: cDefaultMargin * 5, y: cDevice_iPhoneStatusBarHei, width: cScreenWidth - 100, height: cDefaultMargin * 4))
  103. titleLabel.textColor = color
  104. titleLabel.textAlignment = .center
  105. navTitleLabel = titleLabel
  106. navHeadImageView?.addSubview(titleLabel)
  107. }
  108. navTitleLabel?.text = title
  109. }
  110. @objc func rightBtnClick(sender _: UIButton) {}
  111. @objc func backBtnClick() {
  112. navigationController?.popViewController(animated: true)
  113. }
  114. override public func viewDidAppear(_ animated: Bool) {
  115. super.viewDidAppear(animated)
  116. }
  117. override public func viewWillDisappear(_ animated: Bool) {
  118. super.viewWillDisappear(animated)
  119. PQLoadingHUB.shared.dismissHUB()
  120. }
  121. override public func viewDidDisappear(_ animated: Bool) {
  122. super.viewDidDisappear(animated)
  123. if view.viewWithTag(cGuideTag) != nil {
  124. view.viewWithTag(cGuideTag)?.removeFromSuperview()
  125. }
  126. }
  127. deinit {
  128. PQNotification.removeObserver(self)
  129. BFLog(message: "\(String(describing: type(of: self)))被销毁")
  130. }
  131. override public var preferredStatusBarStyle: UIStatusBarStyle {
  132. if PQBFConfig.shared.statusBarStyle == .dark {
  133. if #available(iOS 13.0, *) {
  134. return .darkContent
  135. } else {
  136. return .default
  137. }
  138. } else {
  139. return .lightContent
  140. }
  141. }
  142. override public var prefersStatusBarHidden: Bool {
  143. return isHiddenStatus
  144. }
  145. /// 禁止滑动返回
  146. /// - Returns: <#description#>
  147. func disablePopGesture() -> PQBaseViewController {
  148. let traget = navigationController?.interactivePopGestureRecognizer?.delegate
  149. let pan = UIPanGestureRecognizer(target: traget, action: #selector(popGesture(panGes:)))
  150. view.addGestureRecognizer(pan)
  151. return self
  152. }
  153. /// 拦截侧滑手势
  154. /// - Returns: <#description#>
  155. @objc private func popGesture(panGes: UIPanGestureRecognizer) {
  156. if panGes.state == .ended, popGestureHandle != nil {
  157. popGestureHandle!()
  158. }
  159. }
  160. public func gestureRecognizer(_: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
  161. if touch.view is UISlider {
  162. return false
  163. }
  164. return true
  165. }
  166. }