109 lines
3.1 KiB
Swift
109 lines
3.1 KiB
Swift
//
|
|
// AvatarIconListVC.swift
|
|
// QuickLocation
|
|
//
|
|
// Created by 八条 on 2026/6/11.
|
|
//
|
|
|
|
import UIKit
|
|
import RxSwift
|
|
import RxCocoa
|
|
|
|
class AvatarIconListVC: BaseViewController {
|
|
|
|
fileprivate var rootView: AvatarIconListView!
|
|
|
|
override func loadView() {
|
|
rootView = AvatarIconListView(frame: UIScreen.main.bounds)
|
|
view = rootView
|
|
}
|
|
|
|
private var iconIndex: String
|
|
var onSelectIcon: ((String) -> Void)?
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
rootView.configure(headPic: iconIndex)
|
|
rootView.saveBtn.isHidden = true
|
|
|
|
rootView.saveBtn.rx.tap.subscribe(onNext: { [weak self] _ in
|
|
guard let self else { return }
|
|
let selected = self.rootView.selectedHeadPic
|
|
guard !selected.isEmpty else { return }
|
|
self.onSelectIcon?(selected)
|
|
}).disposed(by: disposeBag)
|
|
|
|
rootView.onBadgeTap = { [weak self] in
|
|
self?.showUploadPicker()
|
|
}
|
|
|
|
rootView.onIconSelected = { [weak self] in
|
|
self?.rootView.saveBtn.isHidden = false
|
|
}
|
|
}
|
|
|
|
private func showUploadPicker() {
|
|
PigeonUploadPopView.show(
|
|
onAlbum: { [weak self] in
|
|
self?.openAlbumPicker()
|
|
},
|
|
onCamera: { [weak self] in
|
|
self?.openCamera()
|
|
}
|
|
)
|
|
}
|
|
|
|
private func openAlbumPicker() {
|
|
let picker = PhotoPickerVC(maxCount: 1)
|
|
picker.onConfirm = { [weak self] images in
|
|
guard let image = images.first else { return }
|
|
self?.uploadAndChangeAvatar(image)
|
|
}
|
|
present(picker, animated: true)
|
|
}
|
|
|
|
private func openCamera() {
|
|
guard UIImagePickerController.isSourceTypeAvailable(.camera) else {
|
|
DLToast.showError(text: "当前设备不支持拍照")
|
|
return
|
|
}
|
|
let vc = CameraCaptureVC(mode: .photo)
|
|
vc.onPhoto = { [weak self] image in
|
|
self?.dismiss(animated: true) {
|
|
self?.uploadAndChangeAvatar(image)
|
|
}
|
|
}
|
|
vc.modalPresentationStyle = .fullScreen
|
|
present(vc, animated: true)
|
|
}
|
|
|
|
private func uploadAndChangeAvatar(_ image: UIImage) {
|
|
guard let jpeg = image.jpegData(compressionQuality: 0.8) else {
|
|
DLToast.show(text: "图片处理失败")
|
|
return
|
|
}
|
|
DLToast.showLoading()
|
|
UploadService.uploadURL(jpeg, kind: .jpeg, scene: "avatar")
|
|
.subscribe(onNext: { [weak self] url in
|
|
guard let self else { return }
|
|
self.rootView.setPreviewImage(image)
|
|
self.rootView.saveBtn.isHidden = true
|
|
self.onSelectIcon?(url)
|
|
}, onError: { error in
|
|
DLToast.show(error, fallbackText: "更换失败")
|
|
})
|
|
.disposed(by: disposeBag)
|
|
}
|
|
|
|
// MARK: - Init
|
|
init(iconIndex: String) {
|
|
self.iconIndex = iconIndex
|
|
super.init(nibName: nil, bundle: nil)
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
}
|