// // UserInfoSettingVC.swift // Twear // // Created by yangbin on 2021/12/27. // import UIKit import SwiftDate import MBProgressHUD import TZImagePickerController class UserInfoSettingVC: UIViewController { @IBOutlet weak var tableView: UITableView! var modifyClosure: ((_ name: String, _ image: UIImage?) -> ())? let settingArray: [[String]] = [["头像", "昵称"], ["性别", "生日", "年龄", "身高", "体重"]] let user = UserInfo override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) navigationController?.setNavigationBarHidden(false, animated: true) } override func viewDidLoad() { super.viewDidLoad() title = LocString("个人信息") tableView.contentInset = UIEdgeInsets.init(top: 5, left: 0, bottom: 10, right: 0) tableView.register(UINib.init(nibName: "SettingCell4", bundle: Bundle.main), forCellReuseIdentifier: "SettingCell4") tableView.register(UINib.init(nibName: "SettingCell5", bundle: Bundle.main), forCellReuseIdentifier: "SettingCell5") tableView.tableFooterView = UIView(frame: CGRect.zero) } private func changeAvatar() { let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) let cancelAction = UIAlertAction(title: LocString("取消"), style: .cancel, handler: nil) cancelAction.setValue(UIColor.rgbColorFromHex(0x00993E), forKey: "titleTextColor") let archiveAction1 = UIAlertAction(title: LocString("拍照"), style: .default) { (action) in self.takePhoto() } archiveAction1.setValue(UIColor.black, forKey: "titleTextColor") let archiveAction2 = UIAlertAction(title: LocString("从手机相册选择"), style: .default) { (action) in self.photoAlbum() } archiveAction2.setValue(UIColor.black, forKey: "titleTextColor") alert.addAction(cancelAction) alert.addAction(archiveAction1) alert.addAction(archiveAction2) present(alert, animated: true, completion: nil) } private func updateUserInfo() { BluetoothManager.shared.setUserInfo(user, completion: nil) AdminHelper.shared.updateUser(user) tableView.reloadData() } private func updateGender() { if UIImage.getImageFromPath("avatar") == nil { let cell = tableView.cellForRow(at: IndexPath(row: 0, section: 0)) as! SettingCell5 let image = UIImage(named: user.gender == 1 ? "avatar_male" : "avatar_female") cell.detailImageView.image = image modifyClosure?("", image) } else { } updateUserInfo() } private func updateAvatar(_ image: UIImage) { if image.saveImageToPath("avatar") { let cell = tableView.cellForRow(at: IndexPath(row: 0, section: 0)) as! SettingCell5 cell.detailImageView.image = image modifyClosure?(user.name, image) } } deinit { print("deinit\(NSStringFromClass(type(of: self)))!!!!!!!") } } extension UserInfoSettingVC: UIImagePickerControllerDelegate, UINavigationControllerDelegate, TZImagePickerControllerDelegate { func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { let type:String = (info[UIImagePickerController.InfoKey.mediaType] as! String) if type == "public.image" { let img = info[UIImagePickerController.InfoKey.editedImage] as! UIImage let aImage = img.compressOriginalImage(10.0) self.updateAvatar(aImage!) picker.dismiss(animated:true, completion:nil) } } //相册 private func photoAlbum() { if PHPhotoLibrary.authorizationStatus().rawValue == 2 { MBProgressHUD.show(LocString("请在“设置-隐私-照片“选项中,允许'HDF wear'访问你的照片")) return } let picker = TZImagePickerController(maxImagesCount: 1, columnNumber: 3, delegate: self) picker?.modalPresentationStyle = .fullScreen picker?.allowPickingOriginalPhoto = false //原图 picker?.allowPickingVideo = false //视频 picker?.allowCameraLocation = false //位置 picker?.allowPickingGif = false //GIF picker?.allowTakePicture = false //内部拍照 picker?.allowCrop = true //裁剪 picker?.didFinishPickingPhotosHandle = {[weak self] (photos, assets, isSelectOriginalPhoto) -> Void in if let images = photos { let image = images[0].compressOriginalImage(50.0) self?.updateAvatar(image!) } } self.present(picker!, animated: true, completion: nil) } //拍照 private func takePhoto() { let authStatus = AVCaptureDevice.authorizationStatus(for: .video) if authStatus == .restricted || authStatus == .denied { MBProgressHUD.showh(LocString("请在“设置-隐私-相机”选项中,允许'HDF wear'访问你的相机")) } else if PHPhotoLibrary.authorizationStatus().rawValue == 2 { MBProgressHUD.showh(LocString("请在“设置-隐私-照片“选项中,允许'HDF wear'访问你的照片")) } else { let picker = UIImagePickerController() picker.modalPresentationStyle = .fullScreen picker.sourceType = .camera picker.delegate = self picker.allowsEditing = true self.present(picker, animated: true, completion: nil) } } } extension UserInfoSettingVC: UITableViewDelegate, UITableViewDataSource { func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { let view = UIView() view.backgroundColor = .clear return view } func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { return 10 } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { if indexPath == [0, 0] { return 60 } else { return 50 } } func numberOfSections(in tableView: UITableView) -> Int { return 2 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return settingArray[section].count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if indexPath == [0, 0] { let cell = tableView.dequeueReusableCell(withIdentifier: "SettingCell5", for: indexPath) as! SettingCell5 cell.titleLabel.text = LocString("头像") if let image = UIImage.getImageFromPath("avatar") { cell.detailImageView.image = image } else { cell.detailImageView.image = UIImage(named: user.gender == 1 ? "avatar_male" : "avatar_female") } return cell } else { let cell = tableView.dequeueReusableCell(withIdentifier: "SettingCell4", for: indexPath) as! SettingCell4 cell.titleLabel.text = LocString(settingArray[indexPath.section][indexPath.row]) switch settingArray[indexPath.section][indexPath.row] { case "昵称": if user.name == "" { cell.detailLabel.text = "\(LocString("用户")):\(user.userId)" } else { cell.detailLabel.text = user.name } case "性别": cell.detailLabel.text = user.gender == 1 ? LocString("男") : LocString("女") case "生日": cell.detailLabel.text = user.birth.toString(.custom("yyyy-MM-dd")) case "年龄": cell.detailLabel.text = "\(user.age)\(LocString("岁"))" case "身高": cell.detailLabel.text = "\(user.height)cm" case "体重": cell.detailLabel.text = "\(user.weight)kg" default: break } return cell } } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let cell = tableView.cellForRow(at: indexPath) cell?.isSelected = false switch settingArray[indexPath.section][indexPath.row] { case "昵称": let vc = UIStoryboard.loadViewControllerIdentifier(storyboardName: "Mine", identifier: "ModifyNicknameVC") as! ModifyNicknameVC vc.nameClosure = {[weak self] name in self?.user.name = name AdminHelper.shared.updateUser((self?.user)!) self?.modifyClosure?(name, nil) self?.tableView.reloadRows(at: [indexPath], with: .none) } navigationController?.pushViewController(vc, animated: true) case "性别": let vc = UIStoryboard.loadViewControllerIdentifier(storyboardName: "Mine", identifier: "ModifyGenderVC") as! ModifyGenderVC vc.selectedRow = 1-user.gender vc.genderClosure = {[weak self] gender in self?.user.gender = gender self?.updateGender() } navigationController?.pushViewController(vc, animated: true) case "生日": let vc = UIStoryboard.loadViewControllerIdentifier(storyboardName: "Mine", identifier: "ModifyBirthdayVC") as! ModifyBirthdayVC vc.birthdayClosure = {[weak self] date, age in self?.user.birth = date self?.user.age = age self?.updateUserInfo() } navigationController?.pushViewController(vc, animated: true) case "体重": let values = (40..<121).map { (i) -> Int in return i } let pickerView = ZCPickerView(title: LocString("体重"), values: values, suffix: "kg") pickerView.selectedRow = values.firstIndex(of: user.weight) ?? 26 pickerView.show() pickerView.clickClosure = {[weak self] value in self?.user.weight = value self?.updateUserInfo() } case "身高": let values = (120..<220).map { (i) -> Int in return i } let pickerView = ZCPickerView(title: LocString("身高"), values: values, suffix: "cm") pickerView.selectedRow = values.firstIndex(of: user.height) ?? 56 pickerView.show() pickerView.clickClosure = {[weak self] value in self?.user.height = value self?.updateUserInfo() } case "头像": changeAvatar() default: break } } }