Common.swift 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. //
  2. // Common.swift
  3. // RainbowPlanet
  4. //
  5. // Created by 南鑫林 on 2018/7/1.
  6. // Copyright © 2018年 南鑫林. All rights reserved.
  7. //
  8. import UIKit
  9. import DeviceKit
  10. import SnapKit
  11. import SwiftyJSON
  12. import ObjectMapper
  13. import RxAtomic
  14. import RxCocoa
  15. import RxSwift
  16. import Kingfisher
  17. //MARK: - 屏幕的高度
  18. ///屏幕宽度
  19. let kScreenWidth = UIScreen.main.bounds.size.width
  20. ///屏幕高度
  21. let kScreenHeight = UIScreen.main.bounds.size.height
  22. /// 屏幕宽比例
  23. let kScaleWidth = kScreenWidth/375.0
  24. /// 屏幕高比例
  25. let kScaleHeight = kScreenHeight/667.0
  26. /// 比例值
  27. func kScaleValue(value:CGFloat) -> CGFloat {
  28. return kScreenWidth / 375.0 * value
  29. }
  30. ///状态栏高度
  31. let kStatusBarHeight = UIApplication.shared.statusBarFrame.size.height
  32. ///navigation高度
  33. let kNavBarHeight = 44.0;
  34. ///状态栏顶部的高度
  35. let kStatusBarTopHeight = statusBarTopHeight()
  36. ///kNavBar高度
  37. let kNavBarBottom = navBarBottom()
  38. ///tabbar高度
  39. let kTabBarHeight = tabBarHeight()
  40. ///tabbar安全高度
  41. let kSafeTabBarHeight = safeTabBarHeight()
  42. ///视图的内容高度包含tabbar
  43. let kContentTabbarHeight = kScreenHeight - kNavBarBottom
  44. ///视图的内容安全高度包含tabbar
  45. let kContentSafeTabbarHeight = kScreenHeight - kNavBarBottom - kSafeTabBarHeight
  46. ///视图的内容高度不包含tabbar
  47. let kContentHeight = kScreenHeight - kNavBarBottom - kTabBarHeight
  48. ///navBar的高度
  49. func navBarBottom() -> CGFloat {
  50. return isIphoneX() ? 88.0 : 64.0
  51. }
  52. ///tabBar高度
  53. func tabBarHeight() -> CGFloat {
  54. return isIphoneX() ? 83.0 : 49.0
  55. }
  56. ///tabbar安全高度
  57. func safeTabBarHeight() -> CGFloat {
  58. return isIphoneX() ? 34.0 : 0.0
  59. }
  60. ///状态栏顶部的高度
  61. private func statusBarTopHeight() -> CGFloat {
  62. return isIphoneX() ? kStatusBarHeight : 0.0
  63. }
  64. ///是不是.iPhoneX,.iPhoneXr,.iPhoneXs,.iPhoneXsMax
  65. private func isIphoneX() -> Bool {
  66. let groupOfAllowedDevices: [Device] = [.iPhoneX,.iPhoneXr,.iPhoneXs,.iPhoneXsMax,.simulator(.iPhoneX),.simulator(.iPhoneXr),.simulator(.iPhoneXs),.simulator(.iPhoneXsMax)]
  67. let device = Device()
  68. if device.isOneOf(groupOfAllowedDevices) {
  69. return true
  70. }else {
  71. return false
  72. }
  73. }
  74. //MARK: - 返回本地图片
  75. /// 返回本地图片
  76. ///
  77. /// - Parameter name: 图片名字
  78. /// - Returns: 图片
  79. func kImage(name :String) -> UIImage? {
  80. return UIImage(named: name)
  81. }
  82. //MARK: - 返回url图片
  83. /// 返回url图片
  84. ///
  85. /// - Parameter name: 图片url
  86. /// - Returns: 图片
  87. func kURLImage(name :String) -> URL? {
  88. return URL(string: name)
  89. }
  90. //MARK: - 返回一个颜色
  91. /// 返回一个颜色
  92. ///
  93. /// - Parameters:
  94. /// - r: 红色
  95. /// - g: 黄
  96. /// - b: 蓝色
  97. /// - Returns: 颜色
  98. func kRGBColor(r:Float , g:Float , b:Float) -> UIColor {
  99. return UIColor(red: (CGFloat(r/255.0)), green: (CGFloat(g/255.0)), blue: (CGFloat(b/255.0)), alpha: 1.0)
  100. }
  101. //MARK: - 返回一个颜色
  102. /// 返回一个颜色
  103. ///
  104. /// - Parameters:
  105. /// - r: 红色
  106. /// - g: 黄
  107. /// - b: 蓝色
  108. /// - a: 透明度
  109. /// - Returns: 颜色
  110. func kRGBAColor(r:Float , g:Float , b:Float, a:Float) -> UIColor {
  111. return UIColor(red: (CGFloat(r/255.0)), green: (CGFloat(g/255.0)), blue: (CGFloat(b/255.0)), alpha: CGFloat(a))
  112. }
  113. /// 代码延迟运行
  114. ///
  115. /// - Parameters:
  116. /// - delayTime: 延时时间。比如:.seconds(5)、.milliseconds(500)
  117. /// - qosClass: 要使用的全局QOS类(默认为 nil,表示主线程)
  118. /// - closure: 延迟运行的代码
  119. func delay(by delayTime: TimeInterval, qosClass: DispatchQoS.QoSClass? = nil,
  120. _ closure: @escaping () -> Void) {
  121. let dispatchQueue = qosClass != nil ? DispatchQueue.global(qos: qosClass!) : .main
  122. dispatchQueue.asyncAfter(deadline: DispatchTime.now() + delayTime, execute: closure)
  123. }
  124. func getCurrentVC() -> UIViewController {
  125. let keywindow = (UIApplication.shared.delegate as! AppDelegate).window//UIApplication.shared.keyWindow使用此有时会崩溃
  126. let firstView: UIView = (keywindow?.subviews.first)!
  127. let secondView: UIView = firstView.subviews.first!
  128. var vc = viewForController(view: secondView)!
  129. vc = ((vc as! UITabBarController).selectedViewController! as! UINavigationController).visibleViewController!
  130. return vc
  131. }
  132. private func viewForController(view:UIView)->UIViewController?{
  133. var next:UIView? = view
  134. repeat{
  135. if let nextResponder = next?.next, nextResponder is UIViewController {
  136. return (nextResponder as! UIViewController)
  137. }
  138. next = next?.superview
  139. }while next != nil
  140. return nil
  141. }