简介

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开发:使用相册、照相机和录像相关推荐

  1. android studio小案例代码,AndroidStudio开发小相册实例

    郑州app开发AndroidStudio开发小相册实例代码如下. 布局代码如下: java代码如下: package cn.xhhkj.xhhkjtest; import android.app.Ac ...

  2. 【iOS开发】相册选择图片识别条形码

    [iOS开发]相册选择图片识别条形码 原生识别条形码 VNDetectBarcodesRequest 只要iOS11.0+以上支持,支持iOS11.0-以下请使用其他方案 // Create a ba ...

  3. android开发 获取相册名称_Android开发之获取相册照片和获取拍照照片

    在Android的开发过程中,我们可能会读取手机里面的照片或者通过相机拍摄获取照片,这是两种常用的获取图片的方式,在做项目过程中也会经常遇到,下面来介绍一下这两种获取方式.. 1.从本地相册获取照片: ...

  4. 照相机的录像内容网上发布方法

    普通照相机录像的内容,通过sina video上传,他们就会帮你转换到flash格式,看这功能很好用. 转载于:https://www.cnblogs.com/peter9/archive/2008/ ...

  5. 微信小程序开发选取相册照片/拍照API调用

    作者最近在探索微信小程序,有一个需求是让用户通过手机相册或者手机摄像头拍照上传图片.效果如下图所示: 由于作者之前没有接触过微信小程序,看了微信小程序的开发手册后就开始写了. 一开始的想法是这样的: ...

  6. iOS/swift之获取系统所有相册和照片录像、封装相册多选

    参考:http://www.hangge.com/blog/cache/detail_1512.html ios14 使用PHPicker获取相册(需要 import PhotosUI) 支持多选 支 ...

  7. 天纵智能软件快速开发平台相册插件

    定义 相册视图类模块用于构建相册管理系统,可以自定义相册分类和相册样式. 功能描述 时尚简约界面风格.可自定义每行相册数和每页行数,点击"更多相册-"展开更多相册,方便手机查看.相 ...

  8. Micropython实例之TPYBoardv102开发板DIY照相机

    2019独角兽企业重金招聘Python工程师标准>>> 摄像头(CAMERA或WEBCAM)又称为电脑相机.电脑眼.电子眼等,是一种视频输入设备,被广泛的运用于视频会议,安防系统   ...

  9. 微信公众号H5开发——调用相册和摄像头并上传服务器

    之前的文章介绍了关于微信JSSDK调用,下面介绍一下其中的一个最常用的功能--调用相册和摄像头 使用此功能之前先参考:微信JSSDK 在通过了config接口验签成功之后,我们就可以调用微信JSSDK ...

最新文章

  1. FZU 1889 龟兔赛跑
  2. Windows核心编程 第三章 内核对象
  3. jquery clone 与 clone(true) 的区别
  4. JavsScript中DOM的基本操作
  5. 6.Spring Cloud Alibaba教程:Sentinel流量防卫兵的介绍与基本使用
  6. php中orm模型,模型model
  7. java插入法排序_java算法之插入排序法
  8. Chain of Responsibility(责任链)
  9. Unity3D mac版汉化教程
  10. 社团管理系统(part1)
  11. 什么是波特率,波特率怎么计算
  12. 基于asp.net338医院体检信息管理系统
  13. vin码识别(车架号识别)的工具
  14. 安装带有 SSH 的 SOCKS 服务器!
  15. 数字化教学资源平台html,数字化教学资源
  16. JAVA中List转数组和数组转List
  17. leecode第一百七十四题(地下城游戏)
  18. 16G内存手机的福音,微信小程序也能建共享相册啦
  19. 全景视频拼接的关键技术与发展优势、作用、应用。
  20. 经纬度和高德地图计算两点距离面积

热门文章

  1. python少儿编程讲师笔试题_小码王教育儿童编程教师面试:做笔试题(填空题和编程题,填空题 - 职朋职业圈...
  2. 史诗级漏洞爆发,Log4j 背后的开源人何去何从?
  3. 免费PDF批量转换图片工具
  4. 劳动保障职业学院计算机专业,北京劳动保障职业学院2020录取分数线(附2017-2020年分数线)...
  5. python将两个csv文件按列合并
  6. python保留两位小数_python保留小数位的三种实现方法
  7. android cursor关闭,android在异步任务中关闭Cursor的代码方法
  8. (https专业版)2018年1月5日高仿互站仿友价T5虚拟交易+实物交易商城-站长交易源码送手机版程序10套模版+首页微信登陆+头部下拉导航...
  9. 修改win7电脑主题脚本
  10. RAID0的安装步骤