PublishUploadProgressView.swift 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. //
  2. // PublishUploadProgressView.swift
  3. // RainbowPlanet
  4. //
  5. // Created by Christopher on 2019/7/21.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. // 发布进度のView
  8. import UIKit
  9. import FWPopupView
  10. import RxSwift
  11. import RxCocoa
  12. /// 跳转方式
  13. ///
  14. /// - none: 默认
  15. /// - push: push
  16. enum UploadStatus{
  17. case uploading
  18. case success
  19. case failure
  20. }
  21. class PublishUploadProgressView: FWPopupView {
  22. typealias CloseViewClosure = () -> Void
  23. var closeViewClosure : CloseViewClosure?
  24. var curUploadStatus : UploadStatus? {
  25. didSet {
  26. judgeShowStatus()
  27. }
  28. }
  29. var uploadProgress: Float? {
  30. didSet {
  31. progressView.setProgress(self.uploadProgress ?? 0, animated: true)
  32. }
  33. }
  34. let disposeBag = DisposeBag()
  35. override init(frame: CGRect) {
  36. super.init(frame: frame)
  37. setupViews()
  38. setupLayouts()
  39. }
  40. required init?(coder aDecoder: NSCoder) {
  41. fatalError("init(coder:) has not been implemented")
  42. }
  43. func setupViews() {
  44. self.backgroundColor = kffffffColor
  45. addSubview(imageView)
  46. addSubview(progressLabel)
  47. addSubview(progressView)
  48. addSubview(failedLabel)
  49. addSubview(failedCloseButton)
  50. }
  51. func setupLayouts() {
  52. imageView.snp.makeConstraints { (make) in
  53. make.left.equalTo(14)
  54. make.centerY.equalToSuperview()
  55. make.size.equalTo(44)
  56. }
  57. progressLabel.snp.makeConstraints { (make) in
  58. make.left.equalTo(imageView.snp_right).offset(10)
  59. make.top.equalTo(14)
  60. make.height.equalTo(20)
  61. }
  62. progressView.snp.makeConstraints { (make) in
  63. make.top.equalTo(progressLabel.snp_bottom).offset(10)
  64. make.left.equalTo(imageView.snp_right).offset(10)
  65. make.right.equalTo(-15)
  66. make.height.equalTo(4)
  67. }
  68. failedLabel.snp.makeConstraints { (make) in
  69. make.left.equalTo(imageView.snp_right).offset(10)
  70. make.centerY.equalToSuperview()
  71. make.height.equalTo(20)
  72. }
  73. failedCloseButton.snp.makeConstraints { (make) in
  74. make.right.equalTo(-3)
  75. make.centerY.equalToSuperview()
  76. make.size.equalTo(44)
  77. }
  78. }
  79. lazy var imageView: UIImageView = {
  80. let imageView = UIImageView()
  81. imageView.image = kImage(name: "pic_preload")
  82. imageView.contentMode = .scaleAspectFill
  83. imageView.clipsToBounds = true
  84. return imageView
  85. }()
  86. private lazy var progressLabel: UILabel = {
  87. let progressLabel = UILabel()
  88. progressLabel.textColor = k333333Color
  89. progressLabel.font = kRegularFont14
  90. progressLabel.textAlignment = .left
  91. return progressLabel
  92. }()
  93. private lazy var progressView: UIProgressView = {
  94. let progressView = UIProgressView(progressViewStyle: .default)
  95. progressView.setProgress(0, animated: false)
  96. progressView.progressTintColor = k62CC74Color //进度颜色
  97. progressView.trackTintColor = kd8d8d8Color //剩余进度颜色
  98. progressView.cornerRadius = 2
  99. progressView.masksToBounds = true
  100. return progressView
  101. }()
  102. private lazy var failedLabel: UILabel = {
  103. let failedLabel = UILabel()
  104. failedLabel.text = "发布失败..."
  105. failedLabel.textColor = k333333Color
  106. failedLabel.font = kRegularFont14
  107. failedLabel.textAlignment = .left
  108. return failedLabel
  109. }()
  110. private lazy var failedCloseButton: UIButton = {
  111. let failedCloseButton = UIButton(type: UIButton.ButtonType.custom)
  112. failedCloseButton.setImage(kImage(name: "popup_btn_close_black"), for: .normal)
  113. failedCloseButton.rx.tap.subscribe(onNext: { [weak self] (data) in
  114. if let closeViewClosure = self?.closeViewClosure {
  115. closeViewClosure()
  116. }
  117. }).disposed(by: disposeBag)
  118. return failedCloseButton
  119. }()
  120. class func publishUploadProgressView(attachedView:UIView) -> PublishUploadProgressView {
  121. let view = PublishUploadProgressView(frame: CGRect(x: 0, y: kNavBarHeight, width: kScreenWidth, height: 62))
  122. view.attachedView = attachedView
  123. let vProperty = FWPopupViewProperty()
  124. vProperty.popupCustomAlignment = .topCenter
  125. vProperty.popupViewEdgeInsets = UIEdgeInsets(top: kNavBarHeight + 48, left: 0, bottom: 0, right: 0 )
  126. vProperty.popupAnimationType = .frame
  127. vProperty.maskViewColor = UIColor(white: 0, alpha: 0.5)
  128. vProperty.touchWildToHide = "0"
  129. vProperty.maskViewColor = UIColor.clear
  130. view.vProperty = vProperty
  131. view.show()
  132. return view
  133. }
  134. }
  135. extension PublishUploadProgressView {
  136. func judgeShowStatus() -> Void {
  137. switch curUploadStatus {
  138. case .uploading?,
  139. .success?:
  140. progressLabel.isHidden = false
  141. progressView.isHidden = false
  142. failedLabel.isHidden = true
  143. failedCloseButton.isHidden = true
  144. case .failure?:
  145. progressLabel.isHidden = true
  146. progressView.isHidden = true
  147. failedLabel.isHidden = false
  148. failedCloseButton.isHidden = false
  149. case .none:
  150. break
  151. }
  152. }
  153. }