123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- import Alamofire
- import NXFramework_Swift
- import UIKit
- public class PQBaseViewController: UIViewController, UIGestureRecognizerDelegate {
-
- public var popGestureHandle: (() -> Void)?
- public var naviTitle: String?
- public var rightButton: UIButton?
- public var backButton: UIButton?
- public var navTitleLabel: UILabel?
- public var navHeadImageView: UIImageView?
- public var lineView: UIView?
- public var isHiddenStatus: Bool = false {
- didSet {
- setNeedsStatusBarAppearanceUpdate()
- }
- }
- public lazy var manager: NetworkReachabilityManager? = {
- let manager = NetworkReachabilityManager(host: "www.baidu.com")
- manager?.listener = { status in
- if status == .reachable(.wwan) || status == .reachable(.ethernetOrWiFi) {}
- }
- return manager
- }()
- override public func viewDidLoad() {
- super.viewDidLoad()
- navigationController?.isNavigationBarHidden = true
- view.backgroundColor = UIColor.black
- navHeadImageView = UIImageView(image: UIImage())
- navHeadImageView?.isUserInteractionEnabled = true
- navHeadImageView?.backgroundColor = UIColor.black
- navHeadImageView?.frame = CGRect(x: 0, y: 0, width: cScreenWidth, height: cDevice_iPhoneNavBarAndStatusBarHei)
- view.addSubview(navHeadImageView!)
- lineView = UIView(frame: CGRect(x: 0, y: (navHeadImageView?.frame.maxY ?? cDevice_iPhoneNavBarAndStatusBarHei) - 0.5, width: cScreenWidth, height: 0.5))
- lineView?.backgroundColor = UIColor.black
- view.addSubview(lineView!)
- UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
- automaticallyAdjustsScrollViewInsets = false
- navigationController?.interactivePopGestureRecognizer?.delegate = self
- fd_prefersNavigationBarHidden = true
- }
- public func hiddenNavigation() {
- navHeadImageView?.isHidden = true
- lineView?.isHidden = true
- }
- func showNavigation() {
- if navHeadImageView != nil {
- navHeadImageView?.isHidden = false
- lineView?.isHidden = false
- view.bringSubviewToFront(navHeadImageView!)
- }
- }
- public func leftBackButton() {
- leftButton(image: "icon_detail_back")
- }
- func leftButton(image: String?,tintColor:UIColor? = nil) {
- let leftButton = UIButton(type: .custom)
- leftButton.frame = CGRect(x: 0, y: cDevice_iPhoneStatusBarHei, width: cDefaultMargin * 4, height: cDefaultMargin * 4)
- leftButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: -5, right: 0)
- if tintColor != nil {
- leftButton.tintColor = tintColor
- leftButton.setImage(UIImage().BF_Image(named: image ?? "icon_detail_back").withRenderingMode(.alwaysTemplate), for: .normal)
- }else{
- leftButton.setImage(UIImage().BF_Image(named: image ?? "icon_detail_back"), for: .normal)
- }
- leftButton.addTarget(self, action: #selector(backBtnClick), for: .touchUpInside)
- navHeadImageView?.addSubview(leftButton)
- backButton = leftButton
- }
- func rightButtonItem(image: String?, title: String?) {
- let rightButtonItem = UIButton(type: .custom)
- var rightW: CGFloat = cDefaultMargin
- if title != nil, title?.count ?? 0 > 0 {
- rightW = rightW + sizeWithText(text: title ?? "", font: UIFont.systemFont(ofSize: 16), size: CGSize(width: CGFloat.greatestFiniteMagnitude, height: cDefaultMargin * 4)).width
- rightButtonItem.setTitle(title, for: .normal)
- rightButtonItem.setTitleColor(UIColor.hexColor(hexadecimal: "#242F44"), for: .normal)
- rightButtonItem.titleLabel?.font = UIFont.systemFont(ofSize: 16)
- }
- if image != nil, image?.count ?? 0 > 0 {
- rightW = rightW + cDefaultMargin * 4
- rightButtonItem.setImage(UIImage(named: image ?? ""), for: .normal)
- rightButtonItem.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: (title != nil && title?.count ?? 0 > 0) ? 0 : -5, right: 0)
- }
- rightButtonItem.adjustsImageWhenHighlighted = false
- rightButtonItem.frame = CGRect(x: cScreenWidth - rightW, y: cDevice_iPhoneStatusBarHei, width: rightW, height: cDefaultMargin * 4)
- rightButtonItem.addTarget(self, action: #selector(rightBtnClick(sender:)), for: .touchUpInside)
- rightButtonItem.contentHorizontalAlignment = .center
- navHeadImageView?.addSubview(rightButtonItem)
- rightButton = rightButtonItem
- }
- func setTitle(title: String?, color: UIColor = UIColor.white) {
- naviTitle = title
- if navTitleLabel == nil {
- let titleLabel = UILabel(frame: CGRect(x: cDefaultMargin * 5, y: cDevice_iPhoneStatusBarHei, width: cScreenWidth - 100, height: cDefaultMargin * 4))
- titleLabel.textColor = color
- titleLabel.textAlignment = .center
- navTitleLabel = titleLabel
- navHeadImageView?.addSubview(titleLabel)
- }
- navTitleLabel?.text = title
- }
- @objc func rightBtnClick(sender _: UIButton) {}
- @objc func backBtnClick() {
- navigationController?.popViewController(animated: true)
- }
- override public func viewDidAppear(_ animated: Bool) {
- super.viewDidAppear(animated)
- }
- override public func viewWillDisappear(_ animated: Bool) {
- super.viewWillDisappear(animated)
- PQLoadingHUB.shared.dismissHUB()
- }
- override public func viewDidDisappear(_ animated: Bool) {
- super.viewDidDisappear(animated)
- if view.viewWithTag(cGuideTag) != nil {
- view.viewWithTag(cGuideTag)?.removeFromSuperview()
- }
- }
- deinit {
- PQNotification.removeObserver(self)
- BFLog(message: "\(String(describing: type(of: self)))被销毁")
- }
- override public var preferredStatusBarStyle: UIStatusBarStyle {
- if PQBFConfig.shared.statusBarStyle == .dark {
- if #available(iOS 13.0, *) {
- return .darkContent
- } else {
- return .default
- }
- } else {
- return .lightContent
- }
- }
- override public var prefersStatusBarHidden: Bool {
- return isHiddenStatus
- }
-
-
- func disablePopGesture() -> PQBaseViewController {
- let traget = navigationController?.interactivePopGestureRecognizer?.delegate
- let pan = UIPanGestureRecognizer(target: traget, action: #selector(popGesture(panGes:)))
- view.addGestureRecognizer(pan)
- return self
- }
-
-
- @objc private func popGesture(panGes: UIPanGestureRecognizer) {
- if panGes.state == .ended, popGestureHandle != nil {
- popGestureHandle!()
- }
- }
- public func gestureRecognizer(_: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
- if touch.view is UISlider {
- return false
- }
- return true
- }
- }
|