Add scenic application flow aligned with Android.

Implement scenic apply models, API, upload, UI, and tests; wire entry from permission apply pages and include related permission/scenic selection UI fixes.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-07 11:09:27 +08:00
parent 2bea05b1d9
commit 77fec21563
22 changed files with 2202 additions and 216 deletions

View File

@ -41,8 +41,10 @@ final class ScenicPermissionBannerView: UIView {
make.centerY.equalToSuperview()
}
snp.makeConstraints { make in
make.height.greaterThanOrEqualTo(44)
make.height.equalTo(44)
}
setContentHuggingPriority(.required, for: .vertical)
setContentCompressionResistancePriority(.required, for: .vertical)
}
@available(*, unavailable)
@ -146,18 +148,20 @@ final class ScenicCurrentLocationBar: UIView {
iconView.snp.makeConstraints { make in
make.leading.equalToSuperview()
make.centerY.equalToSuperview()
make.centerY.equalTo(locationLabel)
make.size.equalTo(16)
}
locationLabel.snp.makeConstraints { make in
make.leading.equalTo(iconView.snp.trailing).offset(4)
make.centerY.equalToSuperview()
make.top.bottom.equalToSuperview().inset(8)
make.trailing.lessThanOrEqualTo(relocateButton.snp.leading).offset(-12)
}
relocateButton.snp.makeConstraints { make in
make.trailing.equalToSuperview()
make.centerY.equalToSuperview()
make.centerY.equalTo(locationLabel)
}
setContentHuggingPriority(.required, for: .vertical)
setContentCompressionResistancePriority(.required, for: .vertical)
}
@available(*, unavailable)
@ -165,8 +169,10 @@ final class ScenicCurrentLocationBar: UIView {
fatalError("init(coder:) has not been implemented")
}
func apply(locationText: String) {
locationLabel.text = locationText
func apply(locationText: String, isLocating: Bool = false) {
locationLabel.text = isLocating ? "定位中..." : locationText
relocateButton.isEnabled = !isLocating
relocateButton.alpha = isLocating ? 0.5 : 1
}
@objc private func relocateTapped() {