148 lines
5.5 KiB
Swift
148 lines
5.5 KiB
Swift
//
|
|
// AppRestrictShieldSettingsVC.swift
|
|
// QuickLocation
|
|
//
|
|
|
|
import PhotosUI
|
|
import UIKit
|
|
|
|
@available(iOS 16.0, *)
|
|
final class AppRestrictShieldSettingsVC: BaseViewController {
|
|
|
|
override var isNavigationBarHidden: Bool { false }
|
|
|
|
private let titleField = UITextField()
|
|
private let subtitleField = UITextField()
|
|
private let buttonField = UITextField()
|
|
private let preview = UIImageView()
|
|
private var config = AppRestrictManager.shared.shieldConfig
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
view.backgroundColor = UIColor(hexStr: "#FAFAFA")
|
|
title = "锁定界面设置"
|
|
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "保存", style: .done, target: self, action: #selector(save))
|
|
|
|
let stack = UIStackView()
|
|
stack.axis = .vertical
|
|
stack.spacing = 12
|
|
view.addSubview(stack)
|
|
stack.layoutChain.top(kNaviHeight + 20).left(16).right(16)
|
|
|
|
func makeField(_ placeholder: String, text: String) -> UITextField {
|
|
let f = UITextField()
|
|
f.placeholder = placeholder
|
|
f.text = text
|
|
f.borderStyle = .roundedRect
|
|
f.font = .systemFont(ofSize: 15)
|
|
f.backgroundColor = .white
|
|
return f
|
|
}
|
|
|
|
titleField.text = config.title
|
|
subtitleField.text = config.subtitle
|
|
buttonField.text = config.primaryButtonLabel
|
|
[titleField, subtitleField, buttonField].forEach {
|
|
$0.borderStyle = .roundedRect
|
|
$0.font = .systemFont(ofSize: 15)
|
|
$0.backgroundColor = .white
|
|
stack.addArrangedSubview($0)
|
|
$0.layoutChain.height(44)
|
|
}
|
|
titleField.placeholder = "标题"
|
|
subtitleField.placeholder = "副标题"
|
|
buttonField.placeholder = "按钮文案"
|
|
|
|
let presetLab = UILabel()
|
|
presetLab.text = "预设图集"
|
|
presetLab.font = .systemFont(ofSize: 14, weight: .bold)
|
|
stack.addArrangedSubview(presetLab)
|
|
|
|
let presetRow = UIStackView()
|
|
presetRow.axis = .horizontal
|
|
presetRow.spacing = 10
|
|
presetRow.distribution = .fillEqually
|
|
[("默认", AppRestrictShieldConfig.ImageSource.presetDefault),
|
|
("专注", .presetFocus),
|
|
("平静", .presetCalm)].forEach { title, source in
|
|
let btn = UIButton(type: .system)
|
|
btn.setTitle(title, for: .normal)
|
|
btn.backgroundColor = .white
|
|
btn.layer.cornerRadius = 8
|
|
btn.tag = source.hashValue
|
|
btn.addAction(UIAction { [weak self] _ in
|
|
self?.config.imageSource = source
|
|
self?.refreshPreview()
|
|
}, for: .touchUpInside)
|
|
presetRow.addArrangedSubview(btn)
|
|
btn.layoutChain.height(40)
|
|
}
|
|
stack.addArrangedSubview(presetRow)
|
|
|
|
let albumBtn = UIButton(type: .system)
|
|
albumBtn.setTitle("从相册选择", for: .normal)
|
|
albumBtn.backgroundColor = UIColor(hexStr: "#16B3FF")
|
|
albumBtn.setTitleColor(.white, for: .normal)
|
|
albumBtn.layer.cornerRadius = 10
|
|
albumBtn.addTarget(self, action: #selector(pickAlbum), for: .touchUpInside)
|
|
stack.addArrangedSubview(albumBtn)
|
|
albumBtn.layoutChain.height(44)
|
|
|
|
preview.contentMode = .scaleAspectFit
|
|
preview.backgroundColor = .white
|
|
preview.layer.cornerRadius = 12
|
|
preview.clipsToBounds = true
|
|
stack.addArrangedSubview(preview)
|
|
preview.layoutChain.height(180)
|
|
|
|
refreshPreview()
|
|
}
|
|
|
|
private func refreshPreview() {
|
|
preview.image = AppRestrictSharedStore.loadShieldImage()
|
|
}
|
|
|
|
@objc private func save() {
|
|
config.title = titleField.text?.trimmingCharacters(in: .whitespacesAndNewlines).nilIfEmpty ?? AppRestrictShieldConfig.default.title
|
|
config.subtitle = subtitleField.text?.trimmingCharacters(in: .whitespacesAndNewlines).nilIfEmpty ?? AppRestrictShieldConfig.default.subtitle
|
|
config.primaryButtonLabel = buttonField.text?.trimmingCharacters(in: .whitespacesAndNewlines).nilIfEmpty ?? AppRestrictShieldConfig.default.primaryButtonLabel
|
|
AppRestrictManager.shared.shieldConfig = config
|
|
DLToast.showSuccess(text: "已保存")
|
|
navigationController?.popViewController(animated: true)
|
|
}
|
|
|
|
@objc private func pickAlbum() {
|
|
var conf = PHPickerConfiguration(photoLibrary: .shared())
|
|
conf.filter = .images
|
|
conf.selectionLimit = 1
|
|
let picker = PHPickerViewController(configuration: conf)
|
|
picker.delegate = self
|
|
present(picker, animated: true)
|
|
}
|
|
}
|
|
|
|
@available(iOS 16.0, *)
|
|
extension AppRestrictShieldSettingsVC: PHPickerViewControllerDelegate {
|
|
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
|
|
picker.dismiss(animated: true)
|
|
guard let provider = results.first?.itemProvider,
|
|
provider.canLoadObject(ofClass: UIImage.self) else { return }
|
|
provider.loadObject(ofClass: UIImage.self) { [weak self] object, _ in
|
|
guard let image = object as? UIImage else { return }
|
|
DispatchQueue.main.async {
|
|
guard let self else { return }
|
|
if AppRestrictManager.shared.saveCustomShieldImage(image) {
|
|
self.config.imageSource = .album
|
|
self.refreshPreview()
|
|
} else {
|
|
DLToast.show(text: "图片保存失败")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private extension String {
|
|
var nilIfEmpty: String? { isEmpty ? nil : self }
|
|
}
|