| | |
| | | |
| | | class UserProfileVC: BaseVC { |
| | | |
| | | @IBOutlet weak var image_user: UIImageView! |
| | | @IBOutlet weak var tf_nickName: QMUITextField! |
| | | @IBOutlet weak var tf_realName: QMUITextField! |
| | | @IBOutlet weak var tf_sign: QMUITextField! |
| | | @IBOutlet weak var tf_gender: QMUITextField! |
| | | @IBOutlet weak var tf_birthday: QMUITextField! |
| | | @IBOutlet weak var tf_degree: QMUITextField! |
| | | @IBOutlet weak var tf_industry: QMUITextField! |
| | | @IBOutlet weak var tf_company: QMUITextField! |
| | | @IBOutlet weak var tf_job: QMUITextField! |
| | | @IBOutlet weak var tf_address: QMUITextField! |
| | | @IBOutlet weak var tf_birthland: QMUITextField! |
| | | @IBOutlet weak var tf_email: QMUITextField! |
| | | @IBOutlet weak var image_user: UIImageView! |
| | | @IBOutlet weak var tf_nickName: QMUITextField! |
| | | @IBOutlet weak var tf_realName: QMUITextField! |
| | | @IBOutlet weak var tf_sign: QMUITextField! |
| | | @IBOutlet weak var tf_gender: QMUITextField! |
| | | @IBOutlet weak var tf_birthday: QMUITextField! |
| | | @IBOutlet weak var tf_degree: QMUITextField! |
| | | @IBOutlet weak var tf_industry: QMUITextField! |
| | | @IBOutlet weak var tf_company: QMUITextField! |
| | | @IBOutlet weak var tf_job: QMUITextField! |
| | | @IBOutlet weak var tf_address: QMUITextField! |
| | | @IBOutlet weak var tf_birthland: QMUITextField! |
| | | @IBOutlet weak var tf_email: QMUITextField! |
| | | @IBOutlet weak var image_placeholder: UIImageView! |
| | | |
| | | private var clipSize = CGSize(width: JQ_ScreenW, height: JQ_ScreenW) //裁剪大小 |
| | | private var clipFrame:CGRect{ |
| | | get{ |
| | | if clipSize.width == 0 || clipSize.height == 0 { |
| | | assert(false,"未设置裁剪框大小") |
| | | } |
| | | |
| | | var clipFrame = CGRect.zero |
| | | clipFrame.size = clipSize |
| | | clipFrame.origin = CGPoint(x: (JQ_ScreenW - clipSize.width)/2.0, y: (JQ_ScreenH - clipSize.width)/2.0) |
| | | return clipFrame |
| | | } |
| | | } |
| | | private var userClipAvar:UIImage? |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "个人资料" |
| | | private var clipSize = CGSize(width: JQ_ScreenW, height: JQ_ScreenW) //裁剪大小 |
| | | private var clipFrame:CGRect{ |
| | | get{ |
| | | if clipSize.width == 0 || clipSize.height == 0 { |
| | | assert(false,"未设置裁剪框大小") |
| | | } |
| | | |
| | | image_placeholder.isHidden = !UserViewModel.getAvatarInfo().avatar.isEmpty |
| | | var clipFrame = CGRect.zero |
| | | clipFrame.size = clipSize |
| | | clipFrame.origin = CGPoint(x: (JQ_ScreenW - clipSize.width)/2.0, y: (JQ_ScreenH - clipSize.width)/2.0) |
| | | return clipFrame |
| | | } |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "个人资料" |
| | | |
| | | |
| | | let saveBtn = UIButton(type: .custom) |
| | | saveBtn.setTitle("保存", for: .normal) |
| | | saveBtn.titleLabel?.font = .systemFont(ofSize: 15) |
| | | saveBtn.setTitleColor(UIColor(hexString: "#353535"), for: .normal) |
| | | saveBtn.addTarget(self, action: #selector(saveAction), for: .touchUpInside) |
| | | navigationItem.rightBarButtonItem = UIBarButtonItem(customView: saveBtn) |
| | | |
| | | // image_placeholder.isHidden = !UserViewModel.getAvatarInfo().avatar.isEmpty |
| | | |
| | | if let url = URL(string: UserViewModel.getAvatarInfo().avatar){ |
| | | image_user.sd_setImage(with: url) |
| | | } |
| | | |
| | | tf_nickName.text = UserViewModel.getAvatarInfo().nickname |
| | | tf_realName.text = UserViewModel.getAvatarInfo().realname |
| | | tf_sign.text = UserViewModel.getAvatarInfo().signature |
| | | tf_gender.text = UserViewModel.getAvatarInfo().gender.rawTitle |
| | | tf_birthday.text = UserViewModel.getAvatarInfo().birthday |
| | | tf_degree.text = UserViewModel.getAvatarInfo().education |
| | | tf_industry.text = UserViewModel.getAvatarInfo().industry |
| | | tf_company.text = UserViewModel.getAvatarInfo().company |
| | | tf_job.text = UserViewModel.getAvatarInfo().occupation |
| | | tf_address.text = UserViewModel.getAvatarInfo().location |
| | | tf_birthland.text = UserViewModel.getAvatarInfo().hometown |
| | | tf_email.text = UserViewModel.getAvatarInfo().email |
| | | tf_nickName.text = UserViewModel.getAvatarInfo().nickname |
| | | tf_realName.text = UserViewModel.getAvatarInfo().realname |
| | | tf_sign.text = UserViewModel.getAvatarInfo().signature |
| | | tf_gender.text = UserViewModel.getAvatarInfo().gender.rawTitle |
| | | tf_birthday.text = UserViewModel.getAvatarInfo().birthday |
| | | tf_degree.text = UserViewModel.getAvatarInfo().education |
| | | tf_industry.text = UserViewModel.getAvatarInfo().industry |
| | | tf_company.text = UserViewModel.getAvatarInfo().company |
| | | tf_job.text = UserViewModel.getAvatarInfo().occupation |
| | | tf_address.text = UserViewModel.getAvatarInfo().location |
| | | tf_birthland.text = UserViewModel.getAvatarInfo().hometown |
| | | tf_email.text = UserViewModel.getAvatarInfo().email |
| | | |
| | | yy_popBlock = {[weak self] in |
| | | tf_nickName.maximumTextLength = 12 |
| | | |
| | | } |
| | | |
| | | override func setUI() { |
| | | super.setUI() |
| | | view.backgroundColor = UIColor(hexString:"#fafafa") |
| | | tf_gender.delegate = self |
| | | tf_birthday.delegate = self |
| | | image_user.isUserInteractionEnabled = true |
| | | let tap = UITapGestureRecognizer(target: self, action: #selector(selectUserProfile)) |
| | | tap.numberOfTapsRequired = 1 |
| | | image_user.addGestureRecognizer(tap) |
| | | } |
| | | |
| | | @objc func saveAction(){ |
| | | let nickname = tf_nickName.text |
| | | let realname = tf_realName.text |
| | | let signature = tf_sign.text |
| | | let gender = GenderType.GenderBy(tf_gender.text!) |
| | | let birthday = tf_birthday.text |
| | | let education = tf_degree.text |
| | | let industry = tf_industry.text |
| | | let company = tf_company.text |
| | | let occupation = tf_job.text |
| | | let location = tf_address.text |
| | | let hometown = tf_birthland.text |
| | | let email = tf_email.text |
| | | |
| | | Services.updateUserInfo(birthday: birthday, company: company, education: education, email: email, gender: gender, hometown: hometown, industry: industry, location: location, nickname: nickname, realname: realname, occupation: occupation, signature: signature).subscribe(onNext: {data in |
| | | NotificationCenter.default.post(name: UpdateUserProfile_Noti, object: nil) |
| | | alertSuccess(msg: "修改成功") |
| | | }).disposed(by: disposeBag) |
| | | |
| | | userClipAvar?.uploadImg().subscribe(onNext: {[weak self]imageUrl in |
| | | guard let weakSelf = self else { return } |
| | | let nickname = weakSelf.tf_nickName.text |
| | | let realname = weakSelf.tf_realName.text |
| | | let signature = weakSelf.tf_sign.text |
| | | let gender = GenderType.GenderBy(weakSelf.tf_gender.text!) |
| | | let birthday = weakSelf.tf_birthday.text |
| | | let education = weakSelf.tf_degree.text |
| | | let industry = weakSelf.tf_industry.text |
| | | let company = weakSelf.tf_company.text |
| | | let occupation = weakSelf.tf_job.text |
| | | let location = weakSelf.tf_address.text |
| | | let hometown = weakSelf.tf_birthland.text |
| | | let email = weakSelf.tf_email.text |
| | | Services.updateUserAvatar(imageUrl).subscribe(onNext: {data in |
| | | weakSelf.image_user.sd_setImage(with: URL(string: imageUrl.jq_urlEncoded())!) |
| | | weakSelf.image_placeholder.isHidden = true |
| | | NotificationCenter.default.post(name: UpdateUserProfile_Noti, object: nil) |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | if nickname != UserViewModel.getAvatarInfo().nickname |
| | | || realname != UserViewModel.getAvatarInfo().realname |
| | | || signature != UserViewModel.getAvatarInfo().signature |
| | | || gender != UserViewModel.getAvatarInfo().gender |
| | | || birthday != UserViewModel.getAvatarInfo().birthday |
| | | || education != UserViewModel.getAvatarInfo().education |
| | | || industry != UserViewModel.getAvatarInfo().industry |
| | | || company != UserViewModel.getAvatarInfo().company |
| | | || occupation != UserViewModel.getAvatarInfo().occupation |
| | | || location != UserViewModel.getAvatarInfo().location |
| | | || hometown != UserViewModel.getAvatarInfo().hometown |
| | | || email != UserViewModel.getAvatarInfo().email{ |
| | | @objc func selectUserProfile(){ |
| | | CommonAlertSheetView.show(items: ["从相册选择"]) {[unowned self] index in |
| | | if index == 0{ |
| | | |
| | | CommonAlertView.show(title: "提示", content: "是否保存修改?",cancelStr: "不保存",completeStr: "保存") { state in |
| | | if state{ |
| | | Services.updateUserInfo(birthday: birthday, company: company, education: education, email: email, gender: gender, hometown: hometown, industry: industry, location: location, nickname: nickname, realname: realname, occupation: occupation, signature: signature).subscribe(onNext: {data in |
| | | NotificationCenter.default.post(name: UpdateUserProfile_Noti, object: nil) |
| | | weakSelf.navigationController?.popViewController(animated: true) |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | }else{ |
| | | weakSelf.navigationController?.popViewController(animated: true) |
| | | } |
| | | } |
| | | let p = TZImagePickerController(maxImagesCount: 1, columnNumber: 3, delegate: self) |
| | | p!.modalPresentationStyle = .fullScreen |
| | | p!.allowTakeVideo = false |
| | | p!.allowTakePicture = false |
| | | p!.sortAscendingByModificationDate = true |
| | | p!.scaleAspectFillCrop = true |
| | | p!.allowPickingVideo = false |
| | | p!.maxImagesCount = 1 |
| | | p!.allowCrop = true |
| | | p!.cropRect = self.clipFrame |
| | | self.present(p!, animated: true, completion: nil) |
| | | |
| | | // guard UIImagePickerController.isSourceTypeAvailable(.camera) else{ |
| | | // alertError(msg: "当前设备相机不可用");return |
| | | // } |
| | | // |
| | | // let p = UIImagePickerController() |
| | | // p.delegate = self |
| | | // p.modalPresentationStyle = .fullScreen |
| | | // p.allowsEditing = true |
| | | // p.sourceType = .camera |
| | | // p.cameraDevice = .front |
| | | // self.present(p, animated: true) |
| | | }else{ |
| | | weakSelf.navigationController?.popViewController(animated: true) |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | override func setUI() { |
| | | super.setUI() |
| | | view.backgroundColor = UIColor(hexString:"#fafafa") |
| | | tf_gender.delegate = self |
| | | tf_birthday.delegate = self |
| | | image_user.isUserInteractionEnabled = true |
| | | let tap = UITapGestureRecognizer(target: self, action: #selector(selectUserProfile)) |
| | | tap.numberOfTapsRequired = 1 |
| | | image_user.addGestureRecognizer(tap) |
| | | } |
| | | |
| | | @objc func selectUserProfile(){ |
| | | CommonAlertSheetView.show(items: ["拍照","从相册选择"]) {[unowned self] index in |
| | | if index == 0{ |
| | | |
| | | guard UIImagePickerController.isSourceTypeAvailable(.camera) else{ |
| | | alertError(msg: "当前设备相机不可用");return |
| | | } |
| | | |
| | | let p = UIImagePickerController() |
| | | p.delegate = self |
| | | p.modalPresentationStyle = .fullScreen |
| | | p.allowsEditing = true |
| | | p.sourceType = .camera |
| | | p.cameraDevice = .front |
| | | self.present(p, animated: true) |
| | | }else{ |
| | | let p = TZImagePickerController(maxImagesCount: 1, columnNumber: 3, delegate: self) |
| | | p!.modalPresentationStyle = .fullScreen |
| | | p!.allowTakeVideo = false |
| | | p!.allowTakePicture = false |
| | | p!.sortAscendingByModificationDate = true |
| | | p!.scaleAspectFillCrop = true |
| | | p!.allowPickingVideo = false |
| | | p!.maxImagesCount = 1 |
| | | p!.allowCrop = true |
| | | p!.cropRect = self.clipFrame |
| | | self.present(p!, animated: true, completion: nil) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | extension UserProfileVC:QMUITextFieldDelegate{ |
| | | func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { |
| | | func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { |
| | | |
| | | if textField == tf_gender{ |
| | | let items = ["男","女","保密"] |
| | | CommonAlertSheetView.show(items: items) { index in |
| | | guard textField.text != items[index] else {return} |
| | | textField.text = items[index] |
| | | } |
| | | } |
| | | if textField == tf_gender{ |
| | | let items = ["男","女","保密"] |
| | | CommonAlertSheetView.show(items: items,hiddenTitle: true) { index in |
| | | guard textField.text != items[index] else {return} |
| | | if items[index] == "保密"{ |
| | | textField.text = "" |
| | | }else{ |
| | | textField.text = items[index] |
| | | } |
| | | } |
| | | } |
| | | |
| | | if textField == tf_birthday{ |
| | | view.endEditing(true) |
| | | BitrhdayPickerView.show(title: "", type: .YMD) {[weak self] date in |
| | | if textField == tf_birthday{ |
| | | view.endEditing(true) |
| | | BitrhdayPickerView.show(title: "", type: .YMD) {[weak self] date in |
| | | self?.tf_birthday.text = date.jq_format("yyyy-MM-dd") |
| | | } |
| | | return false |
| | | } |
| | | |
| | | return false |
| | | } |
| | | } |
| | | return false |
| | | } |
| | | return false |
| | | } |
| | | } |
| | | |
| | | extension UserProfileVC:TZImagePickerControllerDelegate{ |
| | | public func imagePickerController(_ picker: TZImagePickerController!, didFinishPickingPhotos photos: [UIImage]!, sourceAssets assets: [Any]!, isSelectOriginalPhoto: Bool) { |
| | | picker.selectedAssets = NSMutableArray(array: assets) |
| | | public func imagePickerController(_ picker: TZImagePickerController!, didFinishPickingPhotos photos: [UIImage]!, sourceAssets assets: [Any]!, isSelectOriginalPhoto: Bool) { |
| | | picker.selectedAssets = NSMutableArray(array: assets) |
| | | |
| | | if let photo = photos.first{ |
| | | photo.jq_scaled(to: CGSize(width: 250, height: 250)).uploadImg().subscribe(onNext: {[weak self]imageUrl in |
| | | guard let weakSelf = self else { return } |
| | | Services.updateUserAvatar(imageUrl).subscribe(onNext: {data in |
| | | weakSelf.image_placeholder.isHidden = true |
| | | weakSelf.image_user.sd_setImage(with: URL(string: imageUrl)!) |
| | | NotificationCenter.default.post(name: UpdateUserProfile_Noti, object: nil) |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | }).disposed(by: disposeBag) |
| | | self.userClipAvar = photo.jq_scaled(to: CGSize(width: 250, height: 250)) |
| | | // self.image_placeholder.isHidden = true |
| | | } |
| | | } |
| | | } |
| | | |
| | | public func imagePickerController(_ picker: TZImagePickerController!, didFinishPickingAndEditingVideo coverImage: UIImage!, outputPath: String!, error errorMsg: String!) { |
| | | public func imagePickerController(_ picker: TZImagePickerController!, didFinishPickingAndEditingVideo coverImage: UIImage!, outputPath: String!, error errorMsg: String!) { |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | extension UserProfileVC:UIImagePickerControllerDelegate & UINavigationControllerDelegate{ |
| | | //成功选取 |
| | | public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { |
| | | //成功选取 |
| | | public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { |
| | | |
| | | var image:UIImage? |
| | | image = (info[UIImagePickerController.InfoKey.originalImage] as! UIImage) |
| | | let corpperVC = VPImageCropperViewController(image: image!, cropFrame: clipFrame, limitScaleRatio: Int(image!.scale)) |
| | | corpperVC.modalPresentationStyle = .fullScreen |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+1.0) { |
| | | JQ_currentViewController().present(corpperVC, animated: true, completion: nil) |
| | | } |
| | | var image:UIImage? |
| | | image = (info[UIImagePickerController.InfoKey.originalImage] as! UIImage) |
| | | let corpperVC = VPImageCropperViewController(image: image!, cropFrame: clipFrame, limitScaleRatio: Int(image!.scale)) |
| | | corpperVC.modalPresentationStyle = .fullScreen |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+1.0) { |
| | | JQ_currentViewController().present(corpperVC, animated: true, completion: nil) |
| | | } |
| | | |
| | | unowned let weakSelf = self |
| | | corpperVC.imageCropperHandler { (vc, image) in |
| | | image.uploadImg().subscribe(onNext: {imageUrl in |
| | | Services.updateUserAvatar(imageUrl).subscribe(onNext: {data in |
| | | weakSelf.image_user.sd_setImage(with: URL(string: imageUrl)!) |
| | | weakSelf.image_placeholder.isHidden = true |
| | | NotificationCenter.default.post(name: UpdateUserProfile_Noti, object: nil) |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | } cancelClouse: { |
| | | corpperVC.dismiss(animated: true) { |
| | | unowned let weakSelf = self |
| | | corpperVC.imageCropperHandler { (vc, image) in |
| | | weakSelf.userClipAvar = image |
| | | // weakSelf.image_placeholder.isHidden = true |
| | | } cancelClouse: { |
| | | corpperVC.dismiss(animated: true) { |
| | | |
| | | } |
| | | } |
| | | picker.dismiss(animated: true) { |
| | | } |
| | | } |
| | | picker.dismiss(animated: true) { |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |