UserInfoSettingVC.swift 10.7 KB
//
//  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) {
        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
        }
    }
    

}