首先要遵守代理: <span style="color: rgb(0, 175, 202); font-family: Menlo; font-size: 14px; font-variant-ligatures: no-common-ligatures;">UIImagePickerControllerDelegate</span><span style="font-family: Menlo; font-size: 14px; font-variant-ligatures: no-common-ligatures; color: rgb(255, 255, 255);">, </span><span style="color: rgb(0, 175, 202); font-family: Menlo; font-size: 14px; font-variant-ligatures: no-common-ligatures;">UINavigationControllerDelegate</span>
// 创建 提示 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"设置头像" message:nil preferredStyle:(UIAlertControllerStyleActionSheet)]; // 添加按钮 UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { // 初始化 _imagePickerController = [[UIImagePickerController alloc] init]; // 支持的 类型 为 相机 _imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; // 设置 相机 支持的功能 (拍照,视频)(注意: 转化类型~) _imagePickerController.mediaTypes = @[(NSString *)kUTTypeImage]; _imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; _imagePickerController.delegate = self; _imagePickerController.allowsEditing = YES; [self presentViewController:_imagePickerController animated:YES completion:nil]; }]; UIAlertAction *loginAction = [UIAlertAction actionWithTitle:@"相册" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { // 相册 UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.delegate = self; imagePickerController.allowsEditing = YES; imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentViewController:imagePickerController animated:YES completion:nil]; }]; UIAlertAction *quxiaoAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { [self dismissViewControllerAnimated:YES completion:nil]; }]; [alertController addAction:cancelAction]; [alertController addAction:quxiaoAction]; [alertController addAction:loginAction]; [self presentViewController:alertController animated:YES completion:nil];
最主要要实现的代理方法
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{ [picker dismissViewControllerAnimated:YES completion:nil]; // 获取当前类型 NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; //判断 if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { //这是拍照的 UIImage *images = [info objectForKey:UIImagePickerControllerOriginalImage]; UIImage *image = [self imageWithImageSimple:images scaledToSize:CGSizeMake(250, 250)];// 压缩图片 _imageP = image; // 保存图片到本地, 上传图片到服务器需要使用 NSString *nowTime = [NSString stringWithFormat:@"%@.png",[OSRequestManager getTimesTamp]]; [self saveImage:image withName:nowTime]; // 取出图片 NSString *fullPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:nowTime]; NSLog(@"%@",fullPath); UIImage *saveImage = [[UIImage alloc] initWithContentsOfFile:fullPath]; // 保存到相册中, 需要使用函数 UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL); [_imageV setImage:saveImage]; [OSFileManager shareHandle].isClickPhoto = YES; _isChangPhoto = NO; }// 压缩图片
- (UIImage*)imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize)newSize { UIGraphicsBeginImageContext(newSize); [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; }// 保存图片
// 保存图片 - (void)saveImage:(UIImage *)currentImage withName:(NSString *)imageName{ NSData *imageData = UIImageJPEGRepresentation(currentImage, 1); // 获取沙盒目录 NSString *fullPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:imageName]; [imageData writeToFile:fullPath atomically:NO]; }// 上传方法
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSMutableDictionary *par = [NSMutableDictionary dictionary]; par[@"user_id"] = models.user_id; par[@"name"] = name; par[@"mobile"] = _phoneNumberField.text; par[@"public_key"] = @"youin_app"; par[@"timestamp"] = timeStr; par[@"sign"] = sign; par[@"file"] = UIImagePNGRepresentation(_imageP); AFHTTPRequestOperation *httpOperation = [manager POST:url parameters:par constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { _imageData = UIImagePNGRepresentation(_imageP); [formData appendPartWithFileData:_imageData name:@"file" fileName:@"icon.png" mimeType:@"image/png"];// 主要 } success:^(AFHTTPRequestOperation *operation, id responseObject) { // 到这一步一般上传就成功了 NSLog(@"operation.responseString == %@",operation.responseString); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"%@",error); }];