LoadingView.swift 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. //
  2. // LoadingView.swift
  3. // Fei
  4. //
  5. // Created by mcvivi on 2022/3/31.
  6. //
  7. import UIKit
  8. import APNGKit
  9. extension UIWindow
  10. {
  11. class var window:UIWindow{
  12. let window = UIApplication.shared.connectedScenes
  13. .map({ $0 as? UIWindowScene })
  14. .compactMap({ $0 })
  15. .first?.windows.first
  16. if(!window!.isHidden){
  17. return window!;
  18. }
  19. return (UIApplication.shared.delegate?.window!)!;
  20. }
  21. }
  22. extension LoadingView{
  23. class func show(){
  24. let window = UIWindow.window
  25. shared.loadingView.center = window.center
  26. window.addSubview(shared.loadingViewBackground)
  27. shared.label.text = "加载中..."
  28. shared.loadingViewBackground.alpha = 0
  29. shared.loadingViewBackground.addSubview(shared.loadingView)
  30. shared.loadingView.addSubview(shared.imageView)
  31. shared.loadingView.addSubview(shared.label)
  32. UIView.animate(withDuration: 0.3) {
  33. shared.loadingViewBackground.alpha = 1
  34. }
  35. }
  36. class func complete(){
  37. DispatchQueue.main.asyncAfter(deadline: .now()+1, execute:
  38. {
  39. UIView.animate(withDuration: 0.3) {
  40. shared.loadingViewBackground.alpha = 0
  41. } completion: { (bool) in
  42. shared.loadingViewBackground.removeFromSuperview()
  43. }
  44. })
  45. }
  46. }
  47. class LoadingView: NSObject {
  48. fileprivate static let shared:LoadingView = LoadingView()
  49. static var width = 400.0
  50. static var height = 700.0
  51. var loadingViewBackground:UIView = {
  52. let loadingViewBackground = UIView(frame: CGRect.init(x: 0, y: 0, width: width, height: height))
  53. loadingViewBackground.backgroundColor = .white
  54. return loadingViewBackground
  55. }()
  56. var loadingView:UIView = {
  57. let loadingViewSideLength = 109*LoadingView.width/375
  58. let loadingViewXDistance = (LoadingView.width-loadingViewSideLength)/2
  59. let loadingViewYDistance = (LoadingView.height-loadingViewSideLength)/2
  60. let loadingView = UIView(frame: CGRect.init(x: loadingViewXDistance, y: loadingViewYDistance, width: loadingViewSideLength, height: loadingViewSideLength))
  61. loadingView.backgroundColor = .black
  62. loadingView.layer.opacity = 0.65
  63. loadingView.layer.cornerRadius = 12
  64. return loadingView
  65. }()
  66. var label:UILabel = {
  67. let loadingLabelWidth = 52.5*LoadingView.width/375
  68. let loadingLabelHeight = 12.5*LoadingView.width/375
  69. let loadingLabelXDistance = 30.5*LoadingView.width/375
  70. let loadingLabelYDistance = 66.5*LoadingView.width/375
  71. let loadingLabel = UILabel(frame: CGRect(x: loadingLabelXDistance, y: loadingLabelYDistance, width: loadingLabelWidth, height: loadingLabelHeight))
  72. loadingLabel.text = "加载中..."
  73. loadingLabel.textColor = .white
  74. loadingLabel.font = UIFont.init(name: "PingFang-SC-Medium", size: 13*LoadingView.width/375)
  75. return loadingLabel
  76. }()
  77. var imageView:APNGImageView = {
  78. do {
  79. let loadingImageSideLength = 28*LoadingView.width/375
  80. let loadingImageXDistance = 40.5*LoadingView.width/375
  81. let loadingImageYDistance = 30.5*LoadingView.width/375
  82. let image = try APNGImage(named: "jz_00_iSpt")
  83. let loadingViewImageView = APNGImageView(image: image)
  84. loadingViewImageView.frame = CGRect(x: loadingImageXDistance, y: loadingImageYDistance, width: loadingImageSideLength, height: loadingImageSideLength)
  85. return loadingViewImageView
  86. }catch {
  87. }
  88. return APNGImageView.init(frame: CGRect.init(x: 0.0, y: 0.0, width: 0.0, height: 0.0))
  89. }()
  90. }