Add Lottie global loading overlay and fix stuck loading states.

Replace per-VC activity indicators with a ref-counted GlobalLoadingManager, and resolve duplicate show/hide calls on Profile, Statistics, and Home tabs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-06 17:43:13 +08:00
parent 3b17b7f7f0
commit 39186cfe25
14 changed files with 281 additions and 75 deletions

View File

@ -0,0 +1,53 @@
//
// GlobalLoadingOverlayView.swift
// suixinkan
//
import SnapKit
import UIKit
/// Loading Android `LoadingScrim`
final class GlobalLoadingOverlayView: UIView {
private let cardView = UIView()
private let loadingView = LottieLoadingView()
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.black.withAlphaComponent(0.2)
isUserInteractionEnabled = true
cardView.backgroundColor = .white
cardView.layer.cornerRadius = 15
cardView.clipsToBounds = true
addSubview(cardView)
cardView.addSubview(loadingView)
cardView.snp.makeConstraints { make in
make.center.equalToSuperview()
make.width.height.equalTo(100)
}
loadingView.snp.makeConstraints { make in
make.center.equalToSuperview()
make.width.height.equalTo(80)
}
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
///
func present() {
isHidden = false
loadingView.startAnimating()
}
///
func dismiss() {
loadingView.stopAnimating()
isHidden = true
}
}