【iOS-UIImagePickerController访问相机和相册】

【iOS-UIImagePickerController访问相机和相册】

  • 一. UIImagePickerController的介绍
    • 1 . UIImagePickerController的作用
    • 2 . UIImagePickerController的功能
  • 二 . UIImagePickerController的测试程序

一. UIImagePickerController的介绍

1 . UIImagePickerController的作用

UIImagePickerController是iOS平台上的一个类,用于在应用程序中访问设备的照片库、相机和视频录制功能。它提供了一个用户界面,使用户可以从设备的媒体库中选择照片或视频,或者使用设备的摄像头拍摄照片或录制视频。在这里我们先只介绍一下访问相机和相册这两个功能。

2 . UIImagePickerController的功能

(1)访问照片库:使用sourceType属性设置为UIImagePickerControllerSourceTypePhotoLibrary,用户可以从设备的照片库中选择照片或视频。
(2)调用相机拍摄照片:使用sourceType属性设置为UIImagePickerControllerSourceTypeCamera,用户可以使用设备的摄像头拍摄照片。
(3)录制视频:使用sourceType属性设置为UIImagePickerControllerSourceTypeCamera,并将mediaTypes属性设置为支持视频录制的类型,用户可以使用设备的摄像头录制视频。

二 . UIImagePickerController的测试程序

在这里插入图片描述
中间的黄色区域是可以显示图片的区域,可以通过访问系统的相册的照片来改变该位置的图片。
在这里插入图片描述
上面这张图片就是通过访问相册改变的图片。

具体的代码步骤如下:

首先,往视图控制器上面添加导航栏,往导航栏上面添加一张图,并且给图片加上点击事件,并且添加一个视图区域(黄色区域),通过点击事件来选择怎样改变黄色区域的视图。

- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor =  UIColor.whiteColor;// Do any additional setup after loading the view.//添加导航栏的方法调用[self addNavigation];//添加黄视图区域self.headImageview = [[UIImageView alloc] initWithFrame:CGRectMake(120, 200, 153, 153)];self.headImageview.backgroundColor = UIColor.yellowColor;[self.view addSubview:self.headImageview];
}- (void) addNavigation {//手动设置的导航栏UINavigationBarAppearance* apperance = [UINavigationBarAppearance new];[apperance configureWithOpaqueBackground];apperance.backgroundColor = [UIColor colorWithRed:55/255.0 green: 130/255.0 blue:223/255.0 alpha:1.0];apperance.shadowColor = [UIColor clearColor];self.navigationController.navigationBar.standardAppearance = apperance;self.navigationController.navigationBar.scrollEdgeAppearance = self.navigationController.navigationBar.standardAppearance;//设置一个自定义的视图添加到导航栏上。UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 395, 44)];view1.center = self.navigationController.navigationBar.center;self.avatar = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"xiangji.png"]];self.avatar.frame = CGRectMake(310, -5, 44, 44);self.avatar.userInteractionEnabled = YES;[view1 addSubview: self.avatar];//添加点击事件UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(catchImage)];[self.avatar addGestureRecognizer:tap];//将 view1 设置为当前视图控制器的导航栏标题视图self.navigationItem.titleView = view1;
}

然后在点击事件中实现是想要通过相机还是相册来改变视图。

- (void) catchImage {self.imagePickController = [[UIImagePickerController alloc] init];self.imagePickController.delegate = self;self.imagePickController.allowsEditing = YES;UIAlertController* alert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];UIAlertAction* camera = [UIAlertAction actionWithTitle:@"相机" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {[self toCamera];}];UIAlertAction* album = [UIAlertAction actionWithTitle:@"相册" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {[self toAlbum];}];UIAlertAction* cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {[self dismissViewControllerAnimated:YES completion:nil];}];[alert addAction: camera];[alert addAction: album];[alert addAction: cancel];[self presentViewController:alert animated:YES completion:nil];
}- (void) toCamera {if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){self.imagePickController.sourceType = UIImagePickerControllerSourceTypeCamera;self.imagePickController.modalPresentationStyle = UIModalPresentationFullScreen;[self presentViewController:self.imagePickController animated:YES completion:nil];} else {NSLog(@"无法打开相机");}}- (void) toAlbum  {self.imagePickController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;self.imagePickController.modalPresentationStyle = UIModalPresentationFullScreen;[self presentViewController:self.imagePickController animated:YES completion:nil];
}

但是要注意的是,模拟机是无法打开相机的,所以就会出现== Thread 1: “Source type 1 not available”==,然后程序就会崩溃。

最后就是通过一些协议方法来实现其他的功能。
imagePickerController:(UIImagePickerController *)picker是UIImagePickerController提供的三个代理方法之一。

// 取消选择,点击界面中的取消(Cancel)按钮时触发
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {}// 选择完成,点击界面中的某个图片或者选择(Choose)按钮时触发
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info {UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage];self.headImageview.image = image;[picker dismissViewControllerAnimated:YES completion:nil];
}

后续还会根据项目需要学习心新的知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/235291.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java gc垃圾回收机制(垃圾收集 Garbage Collection)

一文带你深入JAVA GC&#xff08;垃圾回收机制&#xff09;面试讲解&#xff01;&#xff01;&#xff01; - 知乎 gc常用算法 gc常用算法有&#xff1a;标记-清除算法&#xff0c;标记-压缩算法&#xff0c;复制算法&#xff0c;分代收集算法。 复制算法&#xff08;Java中…

Python 异常处理(try except)

文章目录 1 概述1.1 异常示例 2 异常处理2.1 捕获异常 try except2.2 抛出异常 raise 3 异常类型3.1 内置异常3.2 自定义异常 1 概述 1.1 异常示例 异常&#xff1a;程序执行中出现错误&#xff0c;若不处理&#xff0c;则程序终止 示例代码&#xff1a; v 6 / 0 # 除数不…

python开发之个微批量删除好友

简要描述&#xff1a; 删除联系人 请求URL&#xff1a; http://域名地址/delContact 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wI…

中伟视界:AI盒子中的报警预录像功能能解决什么问题?实现原理是怎样的?

现代社会智能安防已成为各行各业的重要一环&#xff0c;而AI盒子中的报警预录像功能更是智能安防的一大利器。这一功能能够解决很多安防方面的难题&#xff0c;其实现原理更是技术创新的体现。 首先&#xff0c;让我们来看看AI盒子中的报警预录像功能能解决哪些问题。在传统的安…

网络周期间全球在线销售额飙升,提高排名是关键:7大策略速览

网络周期间&#xff08;11月23-27日&#xff09;&#xff0c;全球在线销售额增长6%&#xff0c;达到2980亿美元&#xff0c;其中美国销售额708亿美元&#xff0c;增长5%。增长主要由订单量推动&#xff0c;消费者需求首次增长&#xff0c;寻求低价和便利。人工智能支持的无缝和…

NAT网络地址转换

目录 什么是nat nat 实验如何使用SNAT 和 DNAT 实验环境 内网连接外网 1.给网关服务器添加网卡&#xff08;两张网卡&#xff09; 2.查看新添加的网卡名 编辑网卡配置 3.开启路由转发 4.打开内网服务器 5.切换到外网服务器&#xff08;192.168.17.30&#xff0…

SAP_ABAP_编程基础_内表_创建内表 / 填充内表 / 读取内表 /修改和删除内表行 / 内表排序 / 创建顺序表 / 比较内表 / 初始化内表

SAP ABAP 顾问&#xff08;开发工程师&#xff09;能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读470次。目标&#xff1a;基于对SAP abap 顾问能力模型的梳理&#xff0c;给一年左右经验的abaper 快速成长为三年经验提供超级燃料&#xff01;https://blog.csdn.net/j…

写给步入三十的自己,2023年终总结!

前言 古语有云: “二十而立&#xff0c;三十而肆”&#xff0c;而我在二十岁这些年已经有一定的责任感和独立思考了&#xff0c;但是还未步入三十&#xff0c;所以为了之后有一定的胆识和能力&#xff0c;我在今年做了目前能做的准备。 今年已做事件 工作相关 1.拿到了PMP证书…

“最甜港姐”走的与众不同之路

网络图片 媒体最新报道&#xff0c;她被誉为“最甜港姐”&#xff0c;曾是TVB炙手可热的当红花旦&#xff0c;却在最当红的时候选择急流勇退。 她不是退圈去相夫教子&#xff0c;而是读书深造&#xff0c;成为一名专业律师。 前不久&#xff0c;又有消息传出&#xff0c;明年…

Spring RabbitMQ那些事(2-两种方式实现延时消息订阅)

目录 一、序言二、死信交换机和消息TTL实现延迟消息1、死信队列介绍2、代码示例(1) 死信交换机配置(2) 消息生产者(3) 消息消费者 3、测试用例 三、延迟消息交换机实现延迟消息1、安装延时消息插件2、代码示例(1) 延时消息交换机配置(2) 消息生产者(3) 消息消费者 3、测试用例 …

【C++ Primer Plus学习记录】嵌套循环和二维数组

for循环是一种处理数组的工具。下面进一步讨论如何使用嵌套for循环中来处理二维数组。 C没有提供二维数组类型&#xff0c;但是用户可以创建每个元素本身都是数组的数组。例如&#xff0c;假设要存储5个城市在4年间的最高温度&#xff0c;可以这样声明数组&#xff1a; int m…

Intellij IDEA 的安装和使用以及配置

IDE有很多种&#xff0c;常见的Eclipse、MyEclipse、Intellij IDEA、JBuilder、NetBeans等。但是这些IDE中目前比较火的是Intellij IDEA&#xff08;以下简称IDEA&#xff09;&#xff0c;被众多Java程序员视为最好用的Java集成开发环境&#xff0c;今天的主题就是IDEA为开发工…