SettingsViewController.m 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. //
  2. // SettingsViewController.m
  3. // 千模
  4. //
  5. // Created by Drew on 2018/10/27.
  6. // Copyright © 2018年 MUMEI. All rights reserved.
  7. //
  8. #import "SettingsViewController.h"
  9. #import <AssetsLibrary/AssetsLibrary.h>
  10. #import <Photos/Photos.h>
  11. #import "TZImageManager.h"
  12. #import "TZPhotoPreviewController.h"
  13. #import "TZImagePickerController.h"
  14. #import "LoginViewController.h"
  15. @interface SettingsViewController () <TZImagePickerControllerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate>{
  16. NSString *nickName;
  17. }
  18. @property (weak, nonatomic) IBOutlet UIView *section1;
  19. @property (weak, nonatomic) IBOutlet UIView *section2;
  20. @property (weak, nonatomic) IBOutlet UIView *section3;
  21. @property (weak, nonatomic) IBOutlet UIButton *btnLogout;
  22. @property (weak, nonatomic) IBOutlet UIImageView *avatar;
  23. @property (weak, nonatomic) IBOutlet UILabel *nickname;
  24. @property (weak, nonatomic) IBOutlet UILabel *phone;
  25. @property(nonatomic, strong) UIImagePickerController *imagePickerVc;
  26. @property(nonatomic, copy) NSData *imageData;
  27. @property(nonatomic, assign) int photoCount;
  28. @property(nonatomic, assign) int VideoCount;
  29. @end
  30. @implementation SettingsViewController
  31. - (void)viewDidLoad {
  32. [super viewDidLoad];
  33. self.navigationItem.title = @"系统设置";
  34. UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
  35. btn.frame = CGRectMake(0, 0, 40, 40);
  36. [btn setImage:[UIImage imageNamed:@"backBtn"] forState:UIControlStateNormal];
  37. btn.imageEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0);
  38. [btn addTarget:self action:@selector(backClick) forControlEvents:UIControlEventTouchUpInside];
  39. UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:btn];
  40. UIBarButtonItem *nagetiveSpacer = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
  41. nagetiveSpacer.width = -12;//这个值可以根据自己需要自己调整
  42. self.navigationItem.leftBarButtonItems = @[nagetiveSpacer, leftItem];
  43. }
  44. -(void)backClick{
  45. [self.navigationController popViewControllerAnimated:YES];
  46. }
  47. -(void)viewDidLayoutSubviews{
  48. [super viewDidLayoutSubviews];
  49. self.btnLogout.layer.cornerRadius = 22;
  50. self.btnLogout.layer.shadowColor = [UIColor colorWithRed:255/255.0 green:64/255.0 blue:149/255.0 alpha:0.36].CGColor;
  51. self.btnLogout.layer.shadowOffset = CGSizeMake(0,8);
  52. self.btnLogout.layer.shadowOpacity = 1;
  53. self.btnLogout.layer.shadowRadius = 10;
  54. }
  55. -(void)viewWillAppear:(BOOL)animated{
  56. [super viewWillAppear:animated];
  57. [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
  58. [self.navigationController.navigationBar setShadowImage:[UIImage new]];
  59. [self getInfo];
  60. }
  61. -(void)viewWillDisappear:(BOOL)animated{
  62. [super viewWillDisappear:animated];
  63. [self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
  64. [self.navigationController.navigationBar setShadowImage:nil];
  65. }
  66. - (void)getInfo {
  67. [MBProgressHUD showHUDAddedTo:self.view animated:YES];
  68. NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:[ModelUser user].modelpk,@"modelpk", nil];
  69. [YanCNetWorkManager requestPostWithURLStr:Url_refreshLogin(PublicUrl)
  70. parameters:dic
  71. finish:^(id dataDic) {
  72. [MBProgressHUD hideHUDForView:self.view animated:YES];
  73. NSString *issuccess = dataDic[@"msg"];
  74. if ([issuccess isEqualToString:@"success"]) {
  75. ModelUser *user = [ModelUser modelUser];
  76. [user setValuesForKeysWithDictionary:dataDic[@"data"]];
  77. user.modelpk = dataDic[@"data"][@"modelpk"];
  78. user.coin_a = dataDic[@"data"][@"coin_a"];
  79. user.coin_ir = dataDic[@"data"][@"coin_ir"];
  80. user.pk = dataDic[@"data"][@"pk"];
  81. user.qrcode = dataDic[@"data"][@"qrcode"];
  82. [ModelUser save:user];
  83. self.nickname.text = [NSString stringWithFormat:@"%@", dataDic[@"data"][@"pet"]];
  84. self.phone.text = [NSString stringWithFormat:@"%@", dataDic[@"data"][@"tel"]];
  85. [self.avatar sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", PublicUrl, dataDic[@"data"][@"hphoto"]]] placeholderImage:[UIImage imageNamed:@"morentouxiang"]];
  86. // if ([dataDic[@"data"][@"hasred"] isEqualToString:@"1"]) {
  87. // self.notificationView.hidden = NO;
  88. // }else{
  89. // self.notificationView.hidden = YES;
  90. // }
  91. } else {
  92. [MBProgressHUD showInfo:@"请求失败!"];
  93. }
  94. }
  95. enError:^(NSError *error) {
  96. [MBProgressHUD hideHUDForView:self.view animated:YES];
  97. }];
  98. }
  99. - (void)PushInfo {
  100. NSData *photoData = _imageData;
  101. NSInteger length = [photoData length] / 1000;
  102. NSLog(@"图片大小:%ld Kb",(long)length);
  103. UIImage *smallPhoto = [UIImage imageWithData:photoData];
  104. ModelUser *user = [ModelUser modelUser];
  105. AFHTTPSessionManager * manger =[AFHTTPSessionManager manager];
  106. manger.responseSerializer = [AFHTTPResponseSerializer serializer];
  107. manger.requestSerializer = [AFJSONRequestSerializer serializer];
  108. manger.securityPolicy.allowInvalidCertificates = YES;
  109. NSDictionary *dict =@{@"memberpk":user.pk,
  110. @"action":@"hp"
  111. };
  112. [manger POST:Url_uploadImage(PublicUrl) parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
  113. if (photoData==NULL) {
  114. }else{
  115. [formData appendPartWithFileData:photoData name:@"img" fileName:@"head.png" mimeType:@"image/png"];
  116. }
  117. } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  118. self.avatar.image = smallPhoto;
  119. NSDictionary *dic =[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers| NSJSONReadingMutableLeaves error:nil];
  120. NSString * img = [dic objectForKey:@"img"];
  121. [[NIMSDK sharedSDK].userManager updateMyUserInfo:@{@(NIMUserInfoUpdateTagAvatar) : [NSString stringWithFormat:@"%@%@",imageURl,img]} completion:nil];
  122. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  123. }];
  124. }
  125. - (IBAction)tapAvatar:(id)sender {
  126. UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
  127. [actionSheet addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
  128. [self dismissViewControllerAnimated:YES completion:^{
  129. }];
  130. }]];
  131. [actionSheet addAction:[UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
  132. [self takePhoto];
  133. }]];
  134. [actionSheet addAction:[UIAlertAction actionWithTitle:@"选择相册照片" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
  135. [self pushImagePickerController];
  136. }]];
  137. [self presentViewController:actionSheet animated:YES completion:nil];
  138. }
  139. - (IBAction)logout:(id)sender {
  140. UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"确定退出登录?" message:nil preferredStyle:UIAlertControllerStyleAlert];
  141. [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];
  142. [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  143. [self setupLoginViewController];
  144. [[[NIMSDK sharedSDK] loginManager] logout:^(NSError *error) {
  145. NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
  146. [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
  147. }];
  148. }]];
  149. [self.navigationController presentViewController:alert animated:YES completion:nil];
  150. }
  151. - (void)setupLoginViewController {
  152. [self.view.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
  153. LoginViewController *loginController = [[LoginViewController alloc] init];
  154. UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:loginController];
  155. self.view.window.rootViewController = nav;
  156. }
  157. #pragma 上传头像
  158. - (void)pushImagePickerController {
  159. TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:1 columnNumber:1 delegate:self pushPhotoPickerVc:YES];
  160. imagePickerVc.allowPickingGif = NO;
  161. imagePickerVc.allowPickingVideo = NO;
  162. imagePickerVc.allowTakePicture = NO;
  163. imagePickerVc.allowCrop = YES;
  164. // You can get the photos by block, the same as by delegate.
  165. // 你可以通过block或者代理,来得到用户选择的照片.
  166. [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
  167. }];
  168. [self presentViewController:imagePickerVc animated:YES completion:nil];
  169. }
  170. - (void)takePhoto {
  171. AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
  172. if ((authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied) && iOS7Later) {
  173. UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:@"无法使用照相机" message:@"请在iPhone的\"设置-隐私-照片\"选项中,\r允许千模访问你的手机相册" preferredStyle:UIAlertControllerStyleAlert];
  174. [actionSheet addAction:[UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
  175. [self dismissViewControllerAnimated:YES completion:^{
  176. }];
  177. }]];
  178. [self presentViewController:actionSheet animated:YES completion:nil];
  179. } else { // 调用相机
  180. self.imagePickerVc = [[UIImagePickerController alloc] init];
  181. self.imagePickerVc.delegate = self;
  182. UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;
  183. self.imagePickerVc.sourceType = sourceType;
  184. [self presentViewController:self.imagePickerVc animated:YES completion:nil];
  185. }
  186. }
  187. - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
  188. if ([picker isKindOfClass:[UIImagePickerController class]]) {
  189. [picker dismissViewControllerAnimated:YES completion:nil];
  190. }
  191. }
  192. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
  193. [picker dismissViewControllerAnimated:YES completion:nil];
  194. NSString *type = info[UIImagePickerControllerMediaType];
  195. if ([type isEqualToString:@"public.image"]) {
  196. TZImagePickerController *tzImagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:1 delegate:self];
  197. [tzImagePickerVc showProgressHUD];
  198. UIImage *image = info[UIImagePickerControllerOriginalImage];
  199. // save photo and get asset / 保存图片,获取到asset
  200. [[TZImageManager manager] savePhotoWithImage:image completion:^(NSError *error) {
  201. if (error) {
  202. [tzImagePickerVc hideProgressHUD];
  203. NSLog(@"图片保存失败 %@", error);
  204. } else {
  205. [[TZImageManager manager] getCameraRollAlbum:NO allowPickingImage:YES completion:^(TZAlbumModel *model) {
  206. [[TZImageManager manager] getAssetsFromFetchResult:model.result allowPickingVideo:NO allowPickingImage:YES completion:^(NSArray<TZAssetModel *> *models) {
  207. [tzImagePickerVc hideProgressHUD];
  208. TZAssetModel *assetModel = [models firstObject];
  209. if (tzImagePickerVc.sortAscendingByModificationDate) {
  210. assetModel = [models lastObject];
  211. }
  212. // 允许裁剪,去裁剪
  213. TZImagePickerController *imagePicker = [[TZImagePickerController alloc] initCropTypeWithAsset:assetModel.asset photo:image completion:^(UIImage *cropImage, id asset) {
  214. self.imageData = UIImageJPEGRepresentation(cropImage, 0.2);
  215. self.avatar.image = cropImage;
  216. _imageData = UIImageJPEGRepresentation(cropImage, 0.2);
  217. [self PushInfo];
  218. }];
  219. [self presentViewController:imagePicker animated:YES completion:nil];
  220. }];
  221. }];
  222. }
  223. }];
  224. }
  225. }
  226. - (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto {
  227. _imageData = UIImageJPEGRepresentation(photos[0], 0.2);
  228. self.avatar.image = photos[0];
  229. [picker dismissViewControllerAnimated:YES completion:nil];
  230. [self PushInfo];
  231. }
  232. - (IBAction)changeName:(id)sender {
  233. // InfoNickNameViewController * nameVc = [[InfoNickNameViewController alloc]init];
  234. // nameVc.nameStr = nickName;
  235. // [self.navigationController pushViewController:nameVc animated:YES];
  236. }
  237. @end