OCiOS开发:使用相册、照相机和录像
简介
UIImagePickerController是一个独立的控制器类,继承自UINavigationController,因此它拥有UINavigationController相同的功能,但我们无法将它放入到我们自己的导航控制器栈中,它作为一个模态视图单独运行在你的界面之上,提供少量的属性和方法供我们使用,因此我们无法改变它的行为,只能做些简单的选取图片以及照相机的使用。
UIImagePickerController共有三种 sourceType 可选:
UIImagePickerControllerSourceTypePhotoLibrary:所有你能通过iPhone内置的照片应用看得到的,通过这个源类型都能显示出来。
UIImagePickerControllerSourceTypeCamera:允许用户使用iPhone内置摄像头拍照。
UIImagePickerControllerSourceTypeSavedPhotosAlbum:包含用户通过摄像头拍摄的。
使用图像拾取器
使用图像拾取器需要遵守两个协议:<UINavigationControllerDelegate, UIImagePickerControllerDelegate
>。
初始化、配置图像拾取器
// 选择相册照片
- (void)selectPhotoAlbumPhotos {// 获取支持的媒体格式NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];// 判断是否支持需要设置的sourceTypeif ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {// 1、设置图片拾取器上的sourceType_imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;// 2、设置支持的媒体格式_imagePickerController.mediaTypes = @[mediaTypes[0]];// 3、其他设置_imagePickerController.allowsEditing = YES; // 如果设置为NO,当用户选择了图片之后不会进入图像编辑界面。// 4、推送图片拾取器控制器[self presentViewController:_imagePickerController animated:YES completion:nil];}
}
回调方法
用户选择
当用户选择了某一张图片或编辑使用了某张图片后会回调以下方法:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
我们可通过上述方法中info
参数得到有用的信息,按如下方式可获取字典的具体值:
UIImage *editedImage = info[@"UIImagePickerControllerEditedImage"];
下面列举5个常用的字典键值:
UIImagePickerControllerMediaType:用户选择的媒体类型,得到的是一个
NSString
得值,返回@"public.image"
或者@"public.movie"
,通过这个值我们就可以判断用户选取的是图片还是视频了。UIImagePickerControllerOriginalImage:没有被编辑过的原始图像。
UIImagePickerControllerEditedImage:用户编辑过后的图像(
allowsEditing
属性设为YES
,通过编辑的到的图像)。UIImagePickerControllerCropRect:返回用户选择的图像区域,它作为一个
NSRect
数据类型返回。UIImagePickerControllerReferenceURL:返回一个媒体类型的
NSURL
。
实例,获取选择的图片,赋值给图片视图,呈现在用户界面上。
// 用户选择了某个媒体
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {NSLog(@"User chosed imageView media with info '%@'.", info);_uploadButton.hidden = NO;if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {if ([info[UIImagePickerControllerMediaType] isEqualToString:@"public.image"]) {UIImage *originalImage = info[UIImagePickerControllerOriginalImage];_headPortraitImageView.image = originalImage;}}else if (picker.sourceType == UIImagePickerControllerSourceTypePhotoLibrary){// UIImage *editedImage = info[@"UIImagePickerControllerEditedImage"];// _headPortraitImageView.image = editedImage;_headPortraitImageView.image = info[UIImagePickerControllerEditedImage];}[self dismissViewControllerAnimated:YES completion:nil];
}
用户取消
当用户点击取消按钮的时候会调用下面的方法:
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
用户选取了图片或者点击了取消以后,我们还需要添加退出图像拾取器的代码,否则将永远处于图像拾取器界面。需要添加的代码如下所示:
// 用户点击了取消按钮
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {[self dismissViewControllerAnimated:YES completion:nil];
}
使用照相机
要使用照相机就必须在真机环境下运行,模拟器暂不支持该功能,如果你在模拟器上运行照相机将会直接奔溃。使用照相机很简单,只需将sourceType
更改为UIImagePickerControllerSourceTypeCamera
即可,别的代码都跟图像拾取器的使用基本一致。
使用照相机的时候,我们可以使用默认的照相机界面,也可以完全使用自己定制的界面。要自定义界面,我们需要将showsCameraControls
属性置为NO
;然后将自定义的UIView
赋给cameraOverlayView
属性即可。
照相机常用属性
cameraCaptureMode:设置相机模式
- UIImagePickerControllerCameraCaptureModePhoto:拍照
- UIImagePickerControllerCameraCaptureModeVideo:录制
cameraDevice:更改摄像头
- UIImagePickerControllerCameraDeviceFront:前置摄像头
- UIImagePickerControllerCameraDeviceRear :后置摄像头
cameraFlashMode:设置闪关灯模式
- UIImagePickerControllerCameraFlashModeOff:关闭闪关灯
- UIImagePickerControllerCameraFlashModeAuto:自动模式
- UIImagePickerControllerCameraFlashModeOn:打开闪关灯
代码示例
// 拍照
- (void)takingPictures {// 获取支持的媒体格式NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];// 判断是否支持需要设置的sourceTypeif ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {// 1、设置图片拾取器上的sourceType_imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;// 2、设置支持的媒体格式_imagePickerController.mediaTypes = @[mediaTypes[0]];// 3、其他设置// 设置相机模式_imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;// 设置摄像头:前置/后置_imagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceFront;// 设置闪光模式_imagePickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;// 4、推送图片拾取器控制器[self presentViewController:_imagePickerController animated:YES completion:nil];}else {NSLog(@"当前设备不支持拍照");UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"温馨提示"message:@"当前设备不支持拍照"preferredStyle:UIAlertControllerStyleAlert];[alertController addAction:[UIAlertAction actionWithTitle:@"确定"style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *action) {_uploadButton.hidden = NO;}]];[self presentViewController:alertControlleranimated:YEScompletion:nil];}
}
使用视频录制
- 使用视频录制和拍照用法基本一致,只需将 cameraCaptureMode 属性设为 UIImagePickerControllerCameraCaptureModeVideo 即可,代码如下:
代码示例
// 录制
- (void)takingShooting {// 获取支持的媒体格式NSArray * mediaTypes =[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];// 判断是否支持需要设置的sourceTypeif ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {_imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;_imagePickerController.mediaTypes = @[mediaTypes[1]];_imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;[self presentViewController:_imagePickerController animated:YES completion:nil];}else {NSLog(@"当前设备不支持录像");UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"温馨提示"message:@"当前设备不支持录像"preferredStyle:UIAlertControllerStyleAlert];[alertController addAction:[UIAlertAction actionWithTitle:@"确定"style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *action) {_uploadButton.hidden = NO;}]];[self presentViewController:alertControlleranimated:YEScompletion:nil];}
}
OCiOS开发:使用相册、照相机和录像相关推荐
- android studio小案例代码,AndroidStudio开发小相册实例
郑州app开发AndroidStudio开发小相册实例代码如下. 布局代码如下: java代码如下: package cn.xhhkj.xhhkjtest; import android.app.Ac ...
- 【iOS开发】相册选择图片识别条形码
[iOS开发]相册选择图片识别条形码 原生识别条形码 VNDetectBarcodesRequest 只要iOS11.0+以上支持,支持iOS11.0-以下请使用其他方案 // Create a ba ...
- android开发 获取相册名称_Android开发之获取相册照片和获取拍照照片
在Android的开发过程中,我们可能会读取手机里面的照片或者通过相机拍摄获取照片,这是两种常用的获取图片的方式,在做项目过程中也会经常遇到,下面来介绍一下这两种获取方式.. 1.从本地相册获取照片: ...
- 照相机的录像内容网上发布方法
普通照相机录像的内容,通过sina video上传,他们就会帮你转换到flash格式,看这功能很好用. 转载于:https://www.cnblogs.com/peter9/archive/2008/ ...
- 微信小程序开发选取相册照片/拍照API调用
作者最近在探索微信小程序,有一个需求是让用户通过手机相册或者手机摄像头拍照上传图片.效果如下图所示: 由于作者之前没有接触过微信小程序,看了微信小程序的开发手册后就开始写了. 一开始的想法是这样的: ...
- iOS/swift之获取系统所有相册和照片录像、封装相册多选
参考:http://www.hangge.com/blog/cache/detail_1512.html ios14 使用PHPicker获取相册(需要 import PhotosUI) 支持多选 支 ...
- 天纵智能软件快速开发平台相册插件
定义 相册视图类模块用于构建相册管理系统,可以自定义相册分类和相册样式. 功能描述 时尚简约界面风格.可自定义每行相册数和每页行数,点击"更多相册-"展开更多相册,方便手机查看.相 ...
- Micropython实例之TPYBoardv102开发板DIY照相机
2019独角兽企业重金招聘Python工程师标准>>> 摄像头(CAMERA或WEBCAM)又称为电脑相机.电脑眼.电子眼等,是一种视频输入设备,被广泛的运用于视频会议,安防系统 ...
- 微信公众号H5开发——调用相册和摄像头并上传服务器
之前的文章介绍了关于微信JSSDK调用,下面介绍一下其中的一个最常用的功能--调用相册和摄像头 使用此功能之前先参考:微信JSSDK 在通过了config接口验签成功之后,我们就可以调用微信JSSDK ...
最新文章
- FZU 1889 龟兔赛跑
- Windows核心编程 第三章 内核对象
- jquery clone 与 clone(true) 的区别
- JavsScript中DOM的基本操作
- 6.Spring Cloud Alibaba教程:Sentinel流量防卫兵的介绍与基本使用
- php中orm模型,模型model
- java插入法排序_java算法之插入排序法
- Chain of Responsibility(责任链)
- Unity3D mac版汉化教程
- 社团管理系统(part1)
- 什么是波特率,波特率怎么计算
- 基于asp.net338医院体检信息管理系统
- vin码识别(车架号识别)的工具
- 安装带有 SSH 的 SOCKS 服务器!
- 数字化教学资源平台html,数字化教学资源
- JAVA中List转数组和数组转List
- leecode第一百七十四题(地下城游戏)
- 16G内存手机的福音,微信小程序也能建共享相册啦
- 全景视频拼接的关键技术与发展优势、作用、应用。
- 经纬度和高德地图计算两点距离面积
热门文章
- python少儿编程讲师笔试题_小码王教育儿童编程教师面试:做笔试题(填空题和编程题,填空题 - 职朋职业圈...
- 史诗级漏洞爆发,Log4j 背后的开源人何去何从?
- 免费PDF批量转换图片工具
- 劳动保障职业学院计算机专业,北京劳动保障职业学院2020录取分数线(附2017-2020年分数线)...
- python将两个csv文件按列合并
- python保留两位小数_python保留小数位的三种实现方法
- android cursor关闭,android在异步任务中关闭Cursor的代码方法
- (https专业版)2018年1月5日高仿互站仿友价T5虚拟交易+实物交易商城-站长交易源码送手机版程序10套模版+首页微信登陆+头部下拉导航...
- 修改win7电脑主题脚本
- RAID0的安装步骤