【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.rhkb.cn/news/206666.html

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

相关文章

Rocketmq架构

NameServer&#xff1a;作为注册中心&#xff0c;提供路由注册、路由踢出、路由发现功能&#xff0c;舍弃强一致&#xff0c;保证高可用&#xff0c;集群中各个节点不会实时通讯&#xff0c;其中一个节点下线之后&#xff0c;会提供另外一个节点保证路由功能。 Rocket mq name…

Scrapy框架中间件(一篇文章齐全)

1、Scrapy框架初识&#xff08;点击前往查阅&#xff09; 2、Scrapy框架持久化存储&#xff08;点击前往查阅&#xff09; 3、Scrapy框架内置管道&#xff08;点击前往查阅&#xff09; 4、Scrapy框架中间件 Scrapy 是一个开源的、基于Python的爬虫框架&#xff0c;它提供了…

大一统模型 Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记

Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记 一、Abstract二、引言三、相关工作实例感知通过类别名进行检索通过语言表达式的检索通过指代标注的检索 统一的视觉模型Unified Learning ParadigmsUnified Model Architectures 四、方法4.1 Pr…

哈希思想的应用:位图、布隆过滤器及哈希切割

一.位图引入 给40定亿个不重复的无符号整数存储在文件中&#xff0c;如何判断一个数在不在其中&#xff1f; 分析&#xff1a;最容易想到的思路是将这些数字存储到某个能够实现快速查找的容器中&#xff0c;如红黑树或哈希表。 但是&#xff0c;10亿个字节大约占1G内存&#x…

智能优化算法应用:基于旗鱼算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于旗鱼算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于旗鱼算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.旗鱼算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

java springboot测试类Transactional解决 测试过程中在数据库留下测试数据问题

好 目前 我们已经完成了表现层对应的测试了 但这里有个坑 如果我们在执行某个声明周期时 包含了测试的过程 它会在数据库中留下一条数据 但真实企业开发 绝对不允许 过一遍留一组数据的 那么 我们的期望就是 执行测试过程 但不要留下任何数据 这是我们的数据库表 然后 这里…

BGP基本配置

一、知识补充 1、BGP BGP是Border Gateway Protocol&#xff08;边界网关协议&#xff09;的缩写。它是用于在互联网中交换路由信息的一种协议。BGP被广泛应用于大规模的自治系统&#xff08;AS&#xff09;之间&#xff0c;用于实现跨网络的路由选择和交换。 BGP的主要功能…

Unity中Shader的Standard材质解析(二)

文章目录 前言一、我们对 Standard 的 PBR 的 GI 进行解析1、我们先创建一个PBR的.cginc文件&#xff0c;用于整理用到的函数2、然后在Standard的Shader中引用该cginc文件 二、依次整理函数到该cginc文件中我们来看一下PBR中GI的镜面反射做了些什么 二、最终代码.cginc代码&…

中兴亮相中国国际现代化铁路技术装备展览会 筑智铁路5G同行

近日&#xff0c;第十六届中国国际现代化铁路技术装备展览会在北京中国国际展览中心举办&#xff0c;中兴以“数智铁路&#xff0c;5G同行”主题亮相本次展览会&#xff0c;并全面展示了“数字铁路网络基础设施”、“云边结合的铁路行业云”、“数字铁路赋能赋智”等方面的最新…

github国内访问小解(windows)

git 下载安装 使用 github 前必须确保电脑上已经安装了 Git&#xff0c;可以从 Git 官方网站去下载。 官方的网站在国内访问会比较慢&#xff0c;这里可以选择国内镜像&#xff1a;https://registry.npmmirror.com/binary.html?pathgit-for-windows/ github 之旅 确认电脑已…

HCIA-H12-811题目解析(1)

1、【多选题】关于动态 MAC 地址表说法正确的是&#xff1f; A、通过报文中的源MAC地址学习获得的动态MAC表项会老化 B、通过查看指定动态MAC地址表项的个数&#xff0c;可以获取接口下通信的用户数 C、在设备重启后&#xff0c;之前的动态表项会丢失 D、在设备重启后&…

运维 在Windows上搭建小型Git服务

文章目录 1、Git选型1.1、主要特性1.2、代码管理1.3、工单管理1.4、Pull/Merge requests1.5、第三方集成1.6、选型结论 2、环境搭建2.1、Gitea下载2.2、Gitea安装2.3、配置服务信息2.4、运行服务2.5、注册Gitea为服务2.6、正常使用 1、Git选型 1.1、主要特性 1.2、代码管理 1.…

VUE2+THREE.JS项目搭建

THREE项目搭建 简介学习文档推荐搭建1.下载three.js2.新建3DWorkShop.vue文件3.创建utils/three/tool.js4.创建components/three/draw.vue[重点]4.1 引入文件4.2 初始化场景4.3 初始化渲染器4.4 初始化光源4.5 初始化相机(人眼模式)4.6 初始化控制器4.7 初始化动画4.8 添加全局…

GB28181学习(十七)——基于jrtplib实现tcp被动和主动发流

前言 GB/T28181-2022实时流的传输方式介绍&#xff1a;https://blog.csdn.net/www_dong/article/details/134255185 基于jrtplib实现tcp被动和主动收流介绍&#xff1a;https://blog.csdn.net/www_dong/article/details/134451387 本文主要介绍下级平台或设备发流功能&#…

【心得】XXE漏洞利用个人笔记

XML中关于DTD类型(内部(SYSTEM)的和外部(PUBLIC)的区别) xxe的利用 XML Entity 实体注入 当程序处理xml文件时&#xff0c;没有禁止对外部实体的处理&#xff0c;容易造成xxe漏洞 危害 主流是任意文件读取 XML 文件 一般表示带有结构的数据 祖父 3个叔父 8个堂弟堂妹 …

【C++】string模拟

string讲解&#xff1a;【C】String类-CSDN博客 基本框架 #pragma once #include <iostream> using namespace std; ​ namespace wzf {class string{public:// 默认构造函数string(): _str(new char[1]), _size(0), _capacity(0){_str[0] \0; // 在没有内容时仍要有终…

ChatGPT 使用入门

背景 ChatGPT是一个强大的聊天机器人助手&#xff0c;内置了大量的互联网知识文档&#xff0c;且具有上下文记忆&#xff0c;可以帮我们快速地查找一些资料&#xff0c;了解一个知识&#xff0c;帮我们回答问题&#xff0c;编写代码等。此外&#xff0c;在使用ChatGPT时具有一…

拼图游戏制作

2.创建用户界面 package domain; /** * ClassName: User * Author: Kox * Data: 2023/2/2 * Sketch: */ public class User { private String username; private String password; public User() { } public User(String username, String p…

简单好用!日常写给 ChatGPT 的几个提示词技巧

ChatGPT 很强&#xff0c;但是有时候又显得很蠢&#xff0c;下面是使用 GPT4 的一个实例&#xff1a; 技巧一&#xff1a;三重冒号 """ 引用内容使用三重冒号 """&#xff0c;让 ChatGPT 清晰引用的内容&#xff1a; 技巧二&#xff1a;角色设定…

【数据清洗 | 数据规约】数据类别型数据 编码最佳实践,确定不来看看?

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…