| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- //
- // QSLLoadingView.swift
- // QuickSearchLocation
- //
- // Created by Destiny on 2025/10/30.
- //
- import UIKit
- class QSLLoadingView: UIView {
- private let statusLabel = UILabel()
- private let progressLabel = UILabel()
- private let progressLayer = CAShapeLayer()
- private let gradientLayer = CAGradientLayer()
- var progress: CGFloat = 0 {
- didSet {
- updateProgress()
- }
- }
- var completion: (() -> Void)?
- override init(frame: CGRect) {
- super.init(frame: frame)
- setupView()
- }
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- private func setupView() {
- self.gradientBackgroundColor(color1: .hexStringColor(hexString: "#D3FFF6"), color2: .white, width: 170.rpx, height: 170.rpx, direction: .horizontal)
- self.layer.cornerRadius = 16.rpx
- statusLabel.textAlignment = .center
- statusLabel.textColor = .red
- statusLabel.font = UIFont.boldSystemFont(ofSize: 12)
- statusLabel.translatesAutoresizingMaskIntoConstraints = false
- self.addSubview(statusLabel)
- progressLabel.textAlignment = .center
- progressLabel.textColor = .black
- progressLabel.font = UIFont.boldSystemFont(ofSize: 20)
- progressLabel.translatesAutoresizingMaskIntoConstraints = false
- self.addSubview(progressLabel)
- let circularPath = UIBezierPath(arcCenter: CGPoint(x: 85.rpx, y: 85.rpx), radius: 44.rpx, startAngle: -CGFloat.pi / 2, endAngle: 3 * CGFloat.pi / 2, clockwise: true)
- progressLayer.path = circularPath.cgPath
- progressLayer.strokeColor = UIColor.gray.cgColor
- progressLayer.fillColor = UIColor.clear.cgColor
- progressLayer.lineWidth = 8
- progressLayer.lineCap = .round
- self.layer.addSublayer(progressLayer)
- gradientLayer.colors = [UIColor.hexStringColor(hexString: "#19D9B1").cgColor, UIColor.hexStringColor(hexString: "#19BFD9").cgColor]
- gradientLayer.startPoint = CGPoint(x: 0, y: 0.5)
- gradientLayer.endPoint = CGPoint(x: 1, y: 0.5)
- gradientLayer.frame = self.bounds
- gradientLayer.mask = progressLayer
- self.layer.addSublayer(gradientLayer)
- NSLayoutConstraint.activate([
- statusLabel.topAnchor.constraint(equalTo: self.topAnchor, constant: 20),
- statusLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
- progressLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
- progressLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
-
-
- ])
- }
- private func updateProgress() {
- progressLayer.strokeEnd = progress / 100
- progressLabel.text = "\(Int(progress))%"
- print("progress:::\(progress)")
- if progress < 40 {
- statusLabel.text = "匹配中"
- statusLabel.textColor = .hexStringColor(hexString: "#F94848")
- } else if progress < 99 {
- statusLabel.text = "处理中"
- statusLabel.textColor = .hexStringColor(hexString: "#4886F9")
- } else if progress >= 100 {
- statusLabel.text = "处理完成"
- statusLabel.textColor = .hexStringColor(hexString: "#1DBA5E")
- }
- }
- }
|