You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
9.0 KiB
215 lines
9.0 KiB
1 year ago
|
//
|
||
|
// GuideUserInfoViewController.swift
|
||
|
// Lookfit
|
||
|
//
|
||
|
// Created by lemo. on 2020/3/11.
|
||
|
// Copyright © 2020 Sheldon. All rights reserved.
|
||
|
//
|
||
|
|
||
|
import UIKit
|
||
|
import AVFoundation
|
||
|
|
||
|
class GuideUserInfoViewController: ViewController {
|
||
|
|
||
|
@IBOutlet weak var headerBtn: UIButton!
|
||
|
@IBOutlet weak var genderLabel: UILabel!
|
||
|
@IBOutlet weak var maleBtn: UIButton!
|
||
|
@IBOutlet weak var femaleBtn: UIButton!
|
||
|
@IBOutlet weak var nickNameLabel: UILabel!
|
||
|
@IBOutlet weak var nickNameTF: UITextField!
|
||
|
@IBOutlet weak var heightLabel: UILabel!
|
||
|
@IBOutlet weak var heightValueLabel: UILabel!
|
||
|
@IBOutlet weak var weightLabel: UILabel!
|
||
|
@IBOutlet weak var weightValueLabel: UILabel!
|
||
|
@IBOutlet weak var birthdayLabel: UILabel!
|
||
|
@IBOutlet weak var birthdayValueLabel: UILabel!
|
||
|
@IBOutlet weak var saveBtn: UIButton!
|
||
|
|
||
|
/// 默认生日
|
||
|
lazy var birthdayValue: Int = {
|
||
|
return DateClass.timeStrToTimestamp("1990-01-01", formatStr: "yyyy-MM-dd")
|
||
|
}()
|
||
|
/// 头像缓存
|
||
|
var headerImage: Data?
|
||
|
|
||
|
lazy var pickerView: PickerView = {
|
||
|
let pickerView = PickerView()
|
||
|
pickerView.currenValues = { [weak self] (value) in
|
||
|
guard let `self` = self else { return }
|
||
|
switch pickerView.type {
|
||
|
case .height:
|
||
|
self.heightValueLabel.text = "\(value) cm"
|
||
|
|
||
|
case .weight:
|
||
|
self.weightValueLabel.text = "\(value) kg"
|
||
|
|
||
|
case .birthday:
|
||
|
self.birthdayValue = value
|
||
|
let dateStr = DateClass.timestampToStr(value, formatStr: "yyyy-MM-dd")
|
||
|
self.birthdayValueLabel.text = dateStr
|
||
|
|
||
|
default:
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
return pickerView
|
||
|
}()
|
||
|
|
||
|
override func viewDidLoad() {
|
||
|
super.viewDidLoad()
|
||
|
}
|
||
|
|
||
|
override func makeUI() {
|
||
|
super.makeUI()
|
||
|
// 按比例适配
|
||
|
for subView in view.subviews {
|
||
|
for constrain in subView.constraints {
|
||
|
constrain.constant = kScaleWidth(constrain.constant)
|
||
|
}
|
||
|
}
|
||
|
isTitleCenter = true
|
||
|
navigationTitle = MultiLanguageKey.baseInfo.localized
|
||
|
maleBtn.isEnabled = false
|
||
|
maleBtn.setBackgroundImage(kHexColor(0xFFA11D).asImage(CGSize(width: kScaleWidth(60), height: kScaleWidth(24))), for: .disabled)
|
||
|
maleBtn.setTitleColor(.white, for: .disabled)
|
||
|
femaleBtn.setTitleColor(.white, for: .disabled)
|
||
|
femaleBtn.setBackgroundImage(kHexColor(0xFFA11D).asImage(CGSize(width: kScaleWidth(60), height: kScaleWidth(24))), for: .disabled)
|
||
|
nickNameTF.basePlaceholder(str: MultiLanguageKey.nicknameTip.localized)
|
||
|
// 多语言
|
||
|
genderLabel.text = MultiLanguageKey.gender.localized
|
||
|
maleBtn.setTitle(MultiLanguageKey.male.localized, for: .normal)
|
||
|
femaleBtn.setTitle(MultiLanguageKey.female.localized, for: .normal)
|
||
|
nickNameLabel.text = MultiLanguageKey.nickname.localized
|
||
|
heightLabel.text = MultiLanguageKey.height.localized
|
||
|
weightLabel.text = MultiLanguageKey.weight.localized
|
||
|
birthdayLabel.text = MultiLanguageKey.birthday.localized
|
||
|
saveBtn.setTitle(MultiLanguageKey.save.localized, for: .normal)
|
||
|
}
|
||
|
|
||
|
override func handleEvent() {
|
||
|
headerBtn.rx.tap
|
||
|
.subscribe(onNext: { [weak self] _ in
|
||
|
guard let `self` = self else { return }
|
||
|
self.setAvator()
|
||
|
})
|
||
|
.disposed(by: rx.disposeBag)
|
||
|
Observable.of(maleBtn.rx.tap, femaleBtn.rx.tap)
|
||
|
.merge()
|
||
|
.subscribe(onNext: { [weak self] _ in
|
||
|
guard let `self` = self else { return }
|
||
|
self.maleBtn.isEnabled = !self.maleBtn.isEnabled
|
||
|
self.femaleBtn.isEnabled = !self.femaleBtn.isEnabled
|
||
|
})
|
||
|
.disposed(by: rx.disposeBag)
|
||
|
saveBtn.rx.tap
|
||
|
.subscribe(onNext: { [weak self] _ in
|
||
|
guard let `self` = self else { return }
|
||
|
// 保存用户信息
|
||
|
guard let nickname = self.nickNameTF.text, nickname != "" else {
|
||
|
SVProgressHUD.showInfo(withStatus: MultiLanguageKey.nicknameTip.localized)
|
||
|
return
|
||
|
}
|
||
|
let heightCM = Int(self.heightValueLabel.text?.components(separatedBy: " ").first ?? "170") ?? 170
|
||
|
let weightKG = Int(self.weightValueLabel.text?.components(separatedBy: " ").first ?? "65") ?? 65
|
||
|
let userInfo = UserInfo(nickname: nickname, avatar: self.headerImage, gender: self.maleBtn.isEnabled, heightCM: heightCM, weightKG: weightKG, birthday: self.birthdayValueLabel.text ?? "")
|
||
|
UserDefaultsManager.saveUserInfo(userInfo: userInfo)
|
||
|
kNotificationCenter.post(name: NSNotification.Name(UserInfoUpdate), object: nil)
|
||
|
self.navigator.dismiss(sender: self)
|
||
|
})
|
||
|
.disposed(by: rx.disposeBag)
|
||
|
}
|
||
|
|
||
|
@IBAction func clickBtn(_ sender: UIButton) {
|
||
|
switch sender.tag {
|
||
|
case 0:
|
||
|
let height = Int(heightValueLabel.text?.components(separatedBy: " ").first ?? "170") ?? 170
|
||
|
pickerView.show(values: height, type: .height, view: view)
|
||
|
case 1:
|
||
|
let weight = Int(weightValueLabel.text?.components(separatedBy: " ").first ?? "65") ?? 65
|
||
|
pickerView.show(values: weight, type: .weight, view: view)
|
||
|
case 2:
|
||
|
pickerView.show(values: birthdayValue, type: .birthday, view: view)
|
||
|
default:
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
extension GuideUserInfoViewController {
|
||
|
func setAvator() {
|
||
|
let alertC = UIAlertController.init(title: nil, message: nil, preferredStyle: .actionSheet)
|
||
|
alertC.addAction(UIAlertAction.init(title: MultiLanguageKey.cancel.localized, style: UIAlertAction.Style.cancel, handler: nil))
|
||
|
let camera = UIAlertAction.init(title: MultiLanguageKey.camera.localized, style: UIAlertAction.Style.default, handler: {[weak self] (_) in
|
||
|
guard let `self` = self else { return }
|
||
|
|
||
|
let authStatus = AVCaptureDevice.authorizationStatus(for: AVMediaType.video)
|
||
|
if authStatus == .denied || authStatus == .restricted {
|
||
|
let alertVC = UIAlertController.init(title: MultiLanguageKey.tip.localized, message: MultiLanguageKey.carmaPower.localized, preferredStyle: .alert)
|
||
|
let goToAction = UIAlertAction.init(title: MultiLanguageKey.goto.localized, style: .default) { (action) in
|
||
|
if let url = URL(string: UIApplication.openSettingsURLString) {
|
||
|
if UIApplication.shared.canOpenURL(url) {
|
||
|
UIApplication.shared.openURL(url)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
let cancelAction = UIAlertAction(title: MultiLanguageKey.cancel.localized, style: .cancel, handler: nil)
|
||
|
alertVC.addAction(goToAction)
|
||
|
alertVC.addAction(cancelAction)
|
||
|
self.present(alertVC, animated: true, completion: nil)
|
||
|
return
|
||
|
}
|
||
|
self.cameraAction()
|
||
|
})
|
||
|
|
||
|
let gallery = UIAlertAction.init(title: MultiLanguageKey.photoSelect.localized, style: UIAlertAction.Style.default, handler: { [weak self](_) in
|
||
|
guard let `self` = self else { return }
|
||
|
self.galleryAction()
|
||
|
})
|
||
|
alertC.addAction(camera)
|
||
|
alertC.addAction(gallery)
|
||
|
self.present(alertC, animated: true, completion: nil)
|
||
|
}
|
||
|
|
||
|
func cameraAction() {
|
||
|
UIImagePickerController.rx.createWithParent(self, animated: true) { (picker) in
|
||
|
picker.allowsEditing = true
|
||
|
picker.sourceType = .camera
|
||
|
}
|
||
|
.flatMap {
|
||
|
$0.rx.didFinishPickingMediaWithInfo
|
||
|
}
|
||
|
.take(1)
|
||
|
.map { info in
|
||
|
return info[UIImagePickerController.InfoKey.editedImage.rawValue] as? UIImage
|
||
|
}
|
||
|
.subscribe(onNext: { [weak self](chooseImg) in
|
||
|
guard let `self` = self, let chooseImg = chooseImg else { return }
|
||
|
self.headerImage = chooseImg.jpegData(compressionQuality: 0.1)
|
||
|
self.headerBtn.setImage(chooseImg, for: .normal)
|
||
|
})
|
||
|
.disposed(by: rx.disposeBag)
|
||
|
}
|
||
|
|
||
|
func galleryAction() {
|
||
|
UIImagePickerController.rx.createWithParent(self, animated: true) { (picker) in
|
||
|
picker.allowsEditing = true
|
||
|
picker.sourceType = .photoLibrary
|
||
|
}
|
||
|
.flatMap {
|
||
|
$0.rx.didFinishPickingMediaWithInfo
|
||
|
}
|
||
|
.take(1)
|
||
|
.map { info in
|
||
|
return info[UIImagePickerController.InfoKey.editedImage.rawValue] as? UIImage
|
||
|
}
|
||
|
.subscribe(onNext: { [weak self](chooseImg) in
|
||
|
guard let `self` = self, let chooseImg = chooseImg else { return }
|
||
|
self.headerImage = chooseImg.jpegData(compressionQuality: 0.3)
|
||
|
self.headerBtn.setImage(chooseImg, for: .normal)
|
||
|
})
|
||
|
.disposed(by: rx.disposeBag)
|
||
|
}
|
||
|
|
||
|
}
|