1. 获取手机相册和相机权限
  • 在info.plist里面添加 Privacy - Photo Library Usage Description, 允许访问手机相册
  • 在info.plist里面添加 Privacy - Camera Usage Description, 允许访问照相机

获取相册和相机权限
2. 遵守两个协议 UINavigationControllerDelegate, UIImagePickerControllerDelegate

遵守协议后实现代理方法,可以对选中图片进行操作

3. 给头像控件添加手势,这里注意设置 userInteractionEnabledYES ,否则手势无效。
  self.headImageView.userInteractionEnabled = YES;UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(changeHeadImage)];[self.headImageView addGestureRecognizer:gesture];
4. 实现手势的方法,弹出 AlertController,选择接下来的操作
- (void)changeHeadImage {UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];[alert addAction:[UIAlertAction actionWithTitle:@"从手机相册选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {// 从手机相册选择图片的操作,见下文步骤5}]];[alert addAction:[UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {   // 拍照操作,见下文下文步骤5 }]];[alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];[self presentViewController:alert animated:YES completion:nil];
}

点击头像出现的弹框
5. 从手机相册选择图片和拍照的操作
   // sourceType是一个枚举,有三种类型,设置为 UIImagePickerControllerSourceTypeCamera 时,调用相机拍照,其余两种从相册中选取图片UIImagePickerControllerSourceTypePhotoLibrary     // 来自图库UIImagePickerControllerSourceTypeCamera           // 来自相机UIImagePickerControllerSourceTypeSavedPhotosAlbum // 来自相册
  UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];// 设置 sourceTypeimagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;imagePicker.delegate = self;// 允许对图片进行拉伸、裁剪等编辑操作,如果设置为 NO,则直接使用原图imagePicker.allowsEditing = YES;[self presentViewController:imagePicker animated:YES completion:nil];

关于UIImagePickerController,戳这里,这是我之前看到的一篇博客,讲的比较详细。

6. 实现代理方法,选中图片后所做的操作放在这里,一般都是将头像控件的头像更换为新选中的头像,并将新头像上传至服务器。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {// 更换头像控件,这里如果key值为 UIImagePickerControllerEditedImage,获取的是编辑过的图片,如果是 UIImagePickerControllerOriginalImage 则获取原图,这里还有几个 key,有兴趣的可以研究一下self.headImageView.image = [info objectForKey:UIImagePickerControllerEditedImage];[self dismissViewControllerAnimated:YES completion:nil];// 新头像上传至服务器}
补充:到这里貌似已经结束了,但是发现调用的相册和相机显示为英文,解决方法如下:
  • 在 info.plist 里面添加 Localized resources can be mixed,类型为Boolean,改为 YES,表示允许应用程序获取框架库内语言
  • 在 info.plist 里面添加 Localizations,类型是 Array ,添加 Chinese

相册显示英文解决方法
文/李长友同学(简书作者)
原文链接:http://www.jianshu.com/p/85c9d3d474c7
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

简单的修改项目中的头像相关推荐

  1. vue项目中实现头像上传的功能型组件

    @vue项目中实现头像上传的功能型组件 功能需求 实现个人中心的头像上传功能: 1.用户未上传过头像,展示设定好的默认头像(区分男女) 2.支持格式png.jpg.jpeg 3.图片大小:小于等于2M ...

  2. vue项目中-上传图片头像并裁剪成任意大小的实现

    vue项目中-上传图片头像并裁剪成任意大小的实现 先看效果图: 放大缩小-翻转-查看都有的哦! 直接上代码 <el-dialog title="图片剪裁" :visible. ...

  3. 【Java学习】从一个简单的HelloWorld项目中入门maven

    创建一个maven项目 这里推荐官方文档:maven官方文档 [注]此篇文章也是笔者学习笔记,如有错误,请见谅. [注]我把Goal翻译成命令.比如Plugin Goal: ps:我他喵的写了一大半的 ...

  4. Myeclipse的使用方法-添加,修改,删除JRE,修改项目中的jre不显示问题

    通过菜单Window > Preferences,然后选择Java > Installed JREs,可以打开供在Eclipse 编写程序所使用的JRE 列表.复选框选中的JRE 是默认的 ...

  5. java中spring的级别_java – 在简单的示例项目中更改Spring框架日志级别?

    这是Spring Boot的工作,它通过slf4j处理日志路由jul,jcl和log4j,并通过slf4j使用Logback,正如您可以通过可区分的缩写命名空间类名称来判断的. 通过直接在pom文件上 ...

  6. 如何修改项目中Git远程仓库地址?

    当开发过程中,遇到git远程仓库地址可能因git服务部署主机地址的变化而发生变化后,我们该如何快速修改. 方法一:通过git命令修改 1.进入项目文件夹,右键鼠标,点击[Git Bash Here] ...

  7. 如何在你的项目中集成 CAP【手把手视频教程】

    前言 之前录制过一期关于CAP的视频,但是由于当时是直播时录制的视频,背景音比较杂所以质量有点差.这次的视频没有直播,直接录制的,视频质量会好很多,第一遍录制完成之后发现播放到一半没有声音,所以又重新 ...

  8. java jndi使用_Java项目中使用JNDI连接数据库

    因为写的大作业经常用到数据库连接 所以自己写了个数据库连接的类 package DB_Link_info;/* * 数据库链接信息 */public class DB_link_Info {publi ...

  9. Druid使用起步—在javaWeb项目中配置监控

    原文章:http://my.oschina.net/u/568779/blog/152813 ---------------------------------------------------- ...

最新文章

  1. Spring Boot 动手写一个 Start
  2. python入门要多久-初学者如何快速上手python入门要多久
  3. Vue.js-Day05【安装路由(vue-router)、如何使用vue-router、404配置、激活class、动态路由、编程式导航、路由嵌套、路由元信息、导航拦截】
  4. pdf如何转换成word文档
  5. html中after对应的样式怎么写,css – 如何创建内联样式:before和:after
  6. linux生成文件清单,Linux 获取文件名称生成列表 txt - create_filelist
  7. golang rpc单参数调用实例
  8. python语法基础知识第四关第二题_【python基础语法】第4天作业练习题
  9. python统计图的三层结构设计代码_【Python数据可视化】用Matplotlib绘制常见统计图,中文显示字体任意设置...
  10. 65.邮件服务器:Postfix
  11. 视频干扰现象及其原因分析
  12. Pr 电影中常见的回忆效果
  13. Android多语言切换
  14. Testin云测:深耕企业应用服务
  15. 此页面上的脚本造成Web浏览器运行速度减慢。如果继续运行,您的计算机将可能停止响应。
  16. Luogu P3717 [AHOI2017初中组]cover
  17. Unity Shader入门精要 第2章 读书笔记
  18. QUASI-HYPERBOLIC (拟双曲线) MOMENTUM AND ADAM FOR DEEP LEARNING——精读
  19. TPshop项目-功能测试(1)
  20. Vue系列——通过moke进行数据模拟

热门文章

  1. 我的电脑,虽然你很慢,但是我很爱你啊!
  2. 中粤拼音在线转换_【PPT技巧】添加拼音小妙招
  3. “百度首页人物”首期人物:《士兵突击》许三多
  4. 全国计算机等级报名登记表,全国计算机等级考试报名报名流程
  5. 申请了SSL数字证书如何进行域名验证?
  6. EXCEL VB简单使用
  7. 速达软件商品流通企业解决方案
  8. 小清新个人简历PPT模板
  9. 数据分析 常用的数据指标
  10. 元宇宙大热,是风口还是虎口