SplashOverlay 抽公共组件 + 进度条配色统一
大厅 / 子游戏之前各有一份 private SplashOverlay:lobby 版含错误态 UI(拉远端 配置失败 splash 上提示重试 / 前往设置);sub-game 版只有 image + label + progressView,配色规则不同(width 0.45 vs 0.7,progressTintColor 不设)。 抽到 Source/WebView/SplashOverlay.swift 共用组件: - 含完整加载 UI + 错误态 UI(sub-game 不调 showError,但保留兜底) - 进度条 progressTintColor = .black,trackTintColor = .systemGray5(实色浅灰) 之前 lobby 用 .systemBlue + label.withAlphaComponent(0.15) 半透明轨道, 黑色填充推过半透明轨道时视觉上像"颜色逐渐加深";改实色轨道后是干脆的 "黑滑过灰",无加深错觉 - progressView.setProgress(animated: true) 保留补间,让快下载也能看到平滑增长 WebContainer / SubGame 删除各自的 private SplashOverlay 类定义,引用同一份。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
e50dfb75af
commit
57d4d93781
@@ -364,66 +364,3 @@ extension SubGameViewController: WKNavigationDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - SplashOverlay(与 WebContainerViewController 同款,先就地复制;
|
||||
// Phase 1.B 后续抽公共组件时合并到 Source/UI/SplashOverlay.swift)
|
||||
|
||||
private final class SplashOverlay: UIView {
|
||||
|
||||
private let imageView = UIImageView()
|
||||
private let progressView = UIProgressView(progressViewStyle: .default)
|
||||
private let label = UILabel()
|
||||
|
||||
init() {
|
||||
super.init(frame: .zero)
|
||||
backgroundColor = .black
|
||||
|
||||
// scaleAspectFill:与 LaunchScreen / WebContainer splash 同款全屏覆盖策略
|
||||
// (现代 iPhone 横屏 19.5:9 比 16:9 素材更宽,scaleAspectFit 会左右补大黑边)
|
||||
imageView.contentMode = .scaleAspectFill
|
||||
imageView.image = UIImage(named: "SplashImage")
|
||||
imageView.clipsToBounds = true
|
||||
imageView.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(imageView)
|
||||
|
||||
label.textColor = .white
|
||||
label.font = .systemFont(ofSize: 14, weight: .medium)
|
||||
label.textAlignment = .center
|
||||
label.numberOfLines = 1
|
||||
label.translatesAutoresizingMaskIntoConstraints = false
|
||||
addSubview(label)
|
||||
|
||||
progressView.translatesAutoresizingMaskIntoConstraints = false
|
||||
progressView.isHidden = true
|
||||
addSubview(progressView)
|
||||
|
||||
NSLayoutConstraint.activate([
|
||||
imageView.topAnchor.constraint(equalTo: topAnchor),
|
||||
imageView.bottomAnchor.constraint(equalTo: bottomAnchor),
|
||||
imageView.leadingAnchor.constraint(equalTo: leadingAnchor),
|
||||
imageView.trailingAnchor.constraint(equalTo: trailingAnchor),
|
||||
|
||||
label.centerXAnchor.constraint(equalTo: centerXAnchor),
|
||||
label.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor, constant: -32),
|
||||
label.leadingAnchor.constraint(greaterThanOrEqualTo: leadingAnchor, constant: 24),
|
||||
label.trailingAnchor.constraint(lessThanOrEqualTo: trailingAnchor, constant: -24),
|
||||
|
||||
progressView.centerXAnchor.constraint(equalTo: centerXAnchor),
|
||||
progressView.bottomAnchor.constraint(equalTo: label.topAnchor, constant: -12),
|
||||
progressView.widthAnchor.constraint(equalTo: widthAnchor, multiplier: 0.45)
|
||||
])
|
||||
}
|
||||
|
||||
@available(*, unavailable)
|
||||
required init?(coder: NSCoder) { fatalError("SplashOverlay does not support init(coder:)") }
|
||||
|
||||
func update(text: String, progress: Double?) {
|
||||
label.text = text
|
||||
if let p = progress {
|
||||
progressView.isHidden = false
|
||||
progressView.setProgress(Float(p), animated: true)
|
||||
} else {
|
||||
progressView.isHidden = true
|
||||
progressView.setProgress(0, animated: false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user