一:效果图

效果描述:点击相框,将手机摄像头拍摄的图片或者本地图片设置为我们定义的头像

功能控件:UIImageView , UIAlertController , UITapGestureRecognizer , UIImagePickerController

首次运行的时候会提醒是否允许程序访问手机相册,点击ok

   

二:工程图

三:代码区

AppDelegate.h

#import <UIKit/UIKit.h>@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (retain, nonatomic) UIWindow *window;@end

AppDelegate.m

#import "AppDelegate.h"
#import "RootViewController.h"@interface AppDelegate ()@end@implementation AppDelegate
- (void)dealloc
{self.window = nil;[super dealloc];
}- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];// Override point for customization after application launch.RootViewController *rootVC = [RootViewController alloc];UINavigationController *navigationVC = [[UINavigationController alloc] initWithRootViewController:rootVC];self.window.rootViewController = navigationVC;[rootVC release];[navigationVC release];self.window.backgroundColor = [UIColor whiteColor];[self.window makeKeyAndVisible];return YES;
}@end

RootViewController.h

#import <UIKit/UIKit.h>@interface RootViewController : UIViewController@end

RootViewController.m

#import "RootViewController.h"@interface RootViewController ()<UINavigationControllerDelegate , UIImagePickerControllerDelegate> // 查看API文档知道,需要遵循这两个代理// 创建属性,为了让每个对象都能访问到
@property (nonatomic , retain)UIImageView *headImage;@end@implementation RootViewController// 重写dealloc
- (void)dealloc
{self.headImage = nil;[super dealloc];
}- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.// 调用创建界面的对象
    [self showHeadImage];// 调用创建手势的对象
    [self tapGesture];
}#pragma mark - 创建界面
- (void)showHeadImage {self.headImage = [[UIImageView alloc] initWithFrame:CGRectMake(120, 50, 80, 80)];_headImage.backgroundColor = [UIColor redColor]; // 验证,查看位置// 创建圆角_headImage.layer.cornerRadius = 40;// 切除多余的部分,如果切除,那么传进来的图片显示方式是正方形_headImage.clipsToBounds = YES;// 打开图片用户交互,不然点击图片将会没有反应_headImage.userInteractionEnabled = YES;[self.view addSubview:_headImage];[_headImage release];}#pragma mark - 创建轻拍手势
- (void)tapGesture {UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];// 将手势添加到_headImage视图上面
    [self.headImage addGestureRecognizer:tap];[tap release];
}#pragma mark - 关联轻拍手势事件
- (void)handleTap:(UITapGestureRecognizer *)sender {// 创建警示视图控制器UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"请选择图片来源" preferredStyle:(UIAlertControllerStyleActionSheet)];// 给警示图视图控制器添加控件UIAlertAction *camera = [UIAlertAction actionWithTitle:@"相机" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction *action) {// 调用调用摄像头的方法
        [self callLocalCamera];}];UIAlertAction *photo = [UIAlertAction actionWithTitle:@"相册" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction *action) {// 调用调用本地相册的方法
        [self callLocalPhotoAlbum];}];UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction *action) {}];// 将控件添加到警示视图控制器上面
    [alertController addAction:camera];[alertController addAction:photo];[alertController addAction:cancel];// 模态出警示视图控制器
    [self presentViewController:alertController animated:YES completion:nil];// 下面使用push的方式展示alertController: 当前页面将会消失进入下一个页面,并且上面没有按钮控件
//    [self.navigationController pushViewController:alertController animated:YES];

}#pragma mark - 调用本地相机
- (void)callLocalCamera {// 判断摄像头是否可用// UIImagePickerController相机选择控制器// isCameraDeviceAvailable:(UIImagePickerControllerCameraDeviceRear):如果后置摄像头可用返回YES,为假返回NO;(检测摄像头设备是否可用)BOOL isAvailabel = [UIImagePickerController isCameraDeviceAvailable:(UIImagePickerControllerCameraDeviceRear)];if (!isAvailabel) { // 如果相机设备不可用,则isAvailbel为空,非就为真
        NSLog(@"没有找到摄像头");return; // 结束调用摄像头
    }// 摄像头可用// 创建图像选择控制器UIImagePickerController *picker = [[UIImagePickerController alloc] init];// 设置图片的来源/*UIImagePickerControllerSourceTypePhotoLibrary, // 显示所有的图片来源UIImagePickerControllerSourceTypeCamera, // 显示摄像头中拍摄的照片UIImagePickerControllerSourceTypeSavedPhotosAlbum // 显示相册中的图片*/picker.sourceType = UIImagePickerControllerSourceTypeCamera;// 允不允许用户对图片进行编辑picker.allowsEditing = YES;// 设置代理,执行代理方法picker.delegate = self;// 模态出视图控制器
    [self presentViewController:picker animated:YES completion:nil];[picker release];}#pragma mark - 调用当地相册
- (void)callLocalPhotoAlbum {// 创建图像选择控制器UIImagePickerController *picker = [[UIImagePickerController alloc] init];// 选择图片来源picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;// 图片是否可编辑picker.allowsEditing = YES;// 设置代理,执行代理方法picker.delegate = self;// 模态出视图控制器
    [self presentViewController:picker animated:YES completion:nil];// 释放
    [picker release];
}#pragma mark - 执行代理方法,将编辑好的图片存放到_headImage上面
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {//
    self.headImage.image = [info objectForKey:UIImagePickerControllerEditedImage];// 模态出当前视图
    [self dismissViewControllerAnimated:YES completion:nil];
}#pragma mark - 内存警告
- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
    }@end

转载于:https://www.cnblogs.com/li625317534/p/5052057.html

将摄像头拍摄图像或者本地图片设置为头像的方法相关推荐

  1. 用python读取图像_Python读取图片属性信息的实现方法

    本文是利用Python脚本读取图片信息,有几个说明如下: 1.没有实现错误处理 2.没有读取所有信息,大概只有 GPS 信息.图片分辨率.图片像素.设备商.拍摄设备等 3.简单修改后应该能实现暴力修改 ...

  2. plt.scatter设置点大小_设置电脑桌面壁纸图文教程,下载图片设置计算机系统屏幕背景方法...

    大家好,我是老盖,首先感谢观看本文,本篇文章做的有视频,视频讲述的比较详细,也可以看我发布的视频. 我们改变桌面背景,需要有一些图片,我个人是在百度图片中下载图片,打开浏览器进入百度图片网站后,输入壁 ...

  3. 获取网络图片或本地图片的长宽的方法

    获取长宽的方法: 1.网络图片 try {BufferedImage image= ImageIO.read(new URL(imgeUrl).openStream());int width = im ...

  4. 【微信小程序】不支持使用本地图片设置背景图片解决方法

    在小程序样式文件中,如果设置背景图片的路径用的是本地的,就会报错并且显示不出来:如果在wxml文件中使用图片的本地路径作为背景图,则微信开发者工具中可以显示出来,但是运行到手机上显示不出来,解决方法如 ...

  5. css设置背景颜色/背景图像/背景图像平铺/背景图像位置/背景图像固定显示/综合设置元素背景的方法(学习笔记)

    一.设置背景颜色 在CSS当中,网页元素的背景颜色使用background-color属性来设置,和文本颜色的用法类似. 用法 <style>h2{color:red;backround- ...

  6. vue项目引入本地图片不显示的解决方法

    一般情况我们引入图片方式: 这样传过去的图片地址,在页面无法显示: 解决方法:使用 require <template><div class="logo"> ...

  7. Cocos Creator 2.4+加载本地图片和微信头像

    1.加载本地图片资源,使用方法cc.resources.load cc.resources.load(url, cc.SpriteFrame, (err: any, tex: cc.SpriteFra ...

  8. 微信小程序设置 本地图片为背景图

    微信小程序 通过wxss进行设置 背景图报错 经查询,发现微信小程序中,将网络图片或base64图片设置为背景图片可正常显示,将本地图片设置为背景图片则不能显示,解决方法有三种,个人采用的是第三种方法 ...

  9. android 点动态显示图片,Android用RecyclerView实现动态添加本地图片

    本文介绍了Android用RecyclerView实现动态添加本地图片,分享给大家,具体如下: 简单介绍一下用法: 1.跳转到图片选择页面: Intent intent = new Intent(Pa ...

最新文章

  1. check_mk自定义监控实践之powershell
  2. PLSQL developer 连接不上64位Oracle 的解决方法
  3. python序列化持久化需要注意的一个问题
  4. 图片文件夹要放在html,在网页中插入图像,若图像文件位于html文件的上两级文件夹,则在文件名之前加入()...
  5. 【python asyncio 运行报错】:raise RuntimeError(‘There is no current event loop in thread %r‘)
  6. Linux Kettle 闪退问题解决方案
  7. Abseil之string_view
  8. Google 推出的编程学习应用 Grasshopper
  9. Vue中模板渲染原理
  10. 基于SpringBoot实现邮箱验证码注册
  11. 基于51单片机的音乐盒彩灯频谱喷泉原理图方案设计
  12. 提高网速软件测试简历,测试局域网网速的方法
  13. 使用Apache OpenNLP探索NLP概念
  14. jzoj3457. 【NOIP2013模拟联考3】沙耶的玩偶
  15. 【SAP】在制品报表 查询及结算余额查询
  16. 我国三大运营商即将开始联手屏蔽垃圾短信
  17. QT访问http服务器,并加载服务器图片
  18. AX200网卡支持linux,Intel 9260/AX200网卡在Deepin/UOS/Ubuntu下网速慢的处理
  19. 合工大计算机系汪教授,合肥工业大学计算机与信息学院导师介绍:方宝富
  20. 滴滴业务中台架构之术:来自技术专家的实践

热门文章

  1. Python的可变长度参数*和**,传参序列解包,isinstance的使用
  2. android9获取蓝牙地址,Android获取本机蓝牙地址
  3. MySQL redis如何实现_如何保障mysql和redis之间的数据一致性?(转发)
  4. python 封装对象数据_Python数据库封装实现代码示例解析
  5. 【转载】中国煤层气资源量
  6. 用VB无窗口透明Usercontrol编写透明浮动按钮
  7. Linux cat 命令用法
  8. 计算机中那些事儿(三):我与Dos的不解情缘---初识篇
  9. 天天打无人车是怎样一种体验?
  10. 2018网易未来科技峰会召开,科技新浪潮改变商业