iOS 图像选取器UIImagePickerController

2023-05-16

UIImagePickerController

UIImagePickerController可以帮助我们调用摄像头拍照或者希望从相册中选择照片。

UIImagePickerController主要属性

// 图片获取来源
@property(nonatomic) UIImagePickerControllerSourceType sourceType;

// 拍完照或相册选择图片后,是否允许编辑图像
@property(nonatomic) BOOL allowsEditing;

// 媒体类型,public.image和public.movie,默认是public.image
@property(nonatomic,copy) NSArray<NSString *> *mediaTypes;

// 代理设置,获取图片
@property(nullable,nonatomic,weak) id <UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate;

UIImagePickerControllerSourceType表示图片获取来源

typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {
    UIImagePickerControllerSourceTypePhotoLibrary, // 照片库
    UIImagePickerControllerSourceTypeCamera, // 相机
    UIImagePickerControllerSourceTypeSavedPhotosAlbum, // 相册
}

相机相关属性

// 是否显示相机控制按钮,默认是YES
@property(nonatomic) BOOL showsCameraControls;

// 自定义相机控制页面
@property(nullable, nonatomic,strong) UIView *cameraOverlayView;

// 拍摄照片还是视频,默认是UIImagePickerControllerCameraCaptureModePhoto
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraCaptureMode) {
    UIImagePickerControllerCameraCaptureModePhoto,
    UIImagePickerControllerCameraCaptureModeVideo
};
@property(nonatomic) UIImagePickerControllerCameraCaptureMode cameraCaptureMode;
   
// 摄像头,默认是UIImagePickerControllerCameraDeviceRear
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) {
    UIImagePickerControllerCameraDeviceRear,
    UIImagePickerControllerCameraDeviceFront
};
@property(nonatomic) UIImagePickerControllerCameraDevice cameraDevice;

// 闪光灯模式,默认是UIImagePickerControllerCameraFlashModeAuto
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraFlashMode) {
    UIImagePickerControllerCameraFlashModeOff  = -1,
    UIImagePickerControllerCameraFlashModeAuto = 0,
    UIImagePickerControllerCameraFlashModeOn   = 1
};
@property(nonatomic) UIImagePickerControllerCameraFlashMode cameraFlashMode; 

// 录像最大时间,默认为十分钟
@property(nonatomic) NSTimeInterval videoMaximumDuration;

// 录像像素
typedef NS_ENUM(NSInteger, UIImagePickerControllerQualityType) {
    UIImagePickerControllerQualityTypeHigh = 0,       // highest quality
    UIImagePickerControllerQualityTypeMedium = 1,     // medium quality,默认
    UIImagePickerControllerQualityTypeLow = 2,        // lowest quality
    UIImagePickerControllerQualityType640x480 = 3,    // VGA quality
    UIImagePickerControllerQualityTypeIFrame1280x720 = 4,
    UIImagePickerControllerQualityTypeIFrame960x540 = 5,
}
@property(nonatomic) UIImagePickerControllerQualityType videoQuality;

UIImagePickerController主要方法

// 判断设备是否支持照片库/相机/相册
+ (BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType; 

// 判断设备照片库/相机/相册支持的媒体类型
+ (nullable NSArray<NSString *> *)availableMediaTypesForSourceType:(UIImagePickerControllerSourceType)sourceType;

// 判断设备是否支持前置摄像头/后置摄像头
+ (BOOL)isCameraDeviceAvailable:(UIImagePickerControllerCameraDevice)cameraDevice;

// 判断设备前置摄像头/后置摄像头是否支持闪光灯
+ (BOOL)isFlashAvailableForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice;

// 判断设备前置摄像头/后置摄像头是否支持拍照/视频
+ (nullable NSArray<NSNumber *> *)availableCaptureModesForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice;

// 拍照
- (void)takePicture

// 开始录像 
- (BOOL)startVideoCapture;

// 停止录像
- (void)stopVideoCapture;

UIImagePickerController功能

从照片库获取图片

UIImagePickerController *vc = [[UIImagePickerController alloc] init];
vc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
vc.allowsEditing = YES;
vc.delegate = self;

[self presentViewController:vc animated:YES completion:nil];

自拍

UIImagePickerController *vc = [[UIImagePickerController alloc] init];
vc.sourceType = UIImagePickerControllerSourceTypeCamera;
vc.cameraDevice = UIImagePickerControllerCameraDeviceFront;
vc.delegate = self;

[self presentViewController:vc animated:YES completion:nil];

录像

UIImagePickerController *vc = [[UIImagePickerController alloc] init];
vc.sourceType = UIImagePickerControllerSourceTypeCamera;
vc.mediaTypes = @[@"public.movie"];
vc.delegate = self;

[self presentViewController:vc animated:YES completion:nil];

UIImagePickerControllerDelegate

UIImagePickerControllerDelegate代理协议提供了用户选择图片后的回调方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info {
    UIImage *originalImage = [info objectForKey:UIImagePickerControllerOriginalImage];
    UIImage *editedImage = [info objectForKey:UIImagePickerControllerEditedImage];
    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    NSURL *mediaURL = [info objectForKey:UIImagePickerControllerMediaURL];
    
    if ([@"public.image" isEqualToString:mediaType]) {
        if (editedImage) {
            self.pickerImageView.image = editedImage;
        } else {
            self.pickerImageView.image = originalImage;
        }
    } else if ([@"public.movie" isEqualToString:mediaType]) {
    }
    [picker dismissViewControllerAnimated:YES completion:nil];
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {    
    [picker dismissViewControllerAnimated:YES completion:nil];
}

info包含了采集的图片/视频信息

// 媒体类型
UIImagePickerControllerInfoKey const UIImagePickerControllerMediaType;
// 原始的UIImage
UIImagePickerControllerInfoKey const UIImagePickerControllerOriginalImage;
// 编辑后的UIImage
UIImagePickerControllerInfoKey const UIImagePickerControllerEditedImage;
// 编辑裁剪区域
UIImagePickerControllerInfoKey const UIImagePickerControllerCropRect;
// 视频文件链接
UIImagePickerControllerInfoKey const UIImagePickerControllerMediaURL;

权限

需要在Info.plist文件中,添加相机、相册和麦克风权限
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 图像选取器UIImagePickerController 的相关文章

  • 利用青龙面版实现cpolar穿透内网

    之前的钉钉穿透 xff0c 被你们薅跑了 cpolar内网穿透拉库 ql raw https ghproxy com https raw githubusercontent com jiankujidu cpolar main nwct c
  • 随身WIFI debian安装docker

    安装docker环境 1 切换root sudo i 2 更新源 xff1a sudo apt get update 3 安装工具 xff1a sudo apt get install curl wget apt transport htt
  • 随身WIFI刷入debian

    本文使用的型号为UFI001 必须刷入boot xff0c 有adb才能玩 xff0c 也可以直接刷入 其他型号请参考大佬的文章 https www kancloud cn handsomehacker openstick 2636505
  • 傻妞恢复包带短信登录(迟来的恢复包)

    傻妞恢复包 magisk模块就不启动青龙 xff0c 添加下容器就可以 目录全部在 data data com termux files home local share tmoe linux containers proot ubuntu
  • A1153

    题意 xff1a 输入准考证号 xff0c 考试分数 然后输入查询命令 xff0c 对每个命令按照要求模拟输出 思路分析 xff1a 命令为1 xff1a 表示查询考 级的所有记录 xff0c 按照成绩从大到小排名 xff0c 成绩相同则按
  • 电脑显示WiFi已连接,但无法访问internet怎么解决?

    我在玩游戏的时候电脑突然卡崩了 xff0c 我无奈的重启了一下 xff0c 结果电脑重启后连不上网了 xff0c 我开始以为还在重新连接 xff0c 在等待 xff0c 过了好久才发现其实早就连上wifi了 xff0c 但显示无法连接int
  • Python-Django-模型

    一 ORM 模型介绍 1 ORM 模型 对象关系映射 xff08 英语 xff1a Object Relational Mapping xff0c 简称ORM xff0c 或ORM xff0c 或OR mapping xff09 xff0c
  • LeetCodeWeeklyContest-159

    最近看了篇文章 xff0c 文章里说 希望你身边能有个比你聪明五倍 xff0c 但却比你还努力十倍的人 倍数虽然有些夸张 xff0c 但是这个思想还是能get到的 5230 缀点成线 在一个 XY 坐标系中有一些点 xff0c 我们用数组
  • 获取安卓设备唯一标识方法总结

    安卓设备的唯一标识的方法并不唯一 xff0c 也没有哪种方法能够适用于所有的Android设备 xff0c 下面列出几种常见的方式 xff0c 可以根据需要选择 1 IMEI 码 IMEI xff08 国际移动设备识别码 xff09 唯一编
  • Anaconda安装及环境变量配置(Ubuntu)

    安装Anaconda 下载软件 Anaconda下载地址打开终端 xff0c 进入到安装包的存放路径输入命令 xff1a span class token function bash span namexxxxx span class to
  • 快速幂——原理及实现

    这篇文章讲一下快速幂的问题 xff1b 首先问一个简单的问题 xff1a 23是几 xff1f 很简单啊 xff0c 是不是 xff1f 答案是8 xff1b 那么是怎么得来的呢 xff1f 222 61 8 xff1b 连续乘了3次2 x
  • 适合小白的几个入门级Python ocr识别库

    1 pytesseract 2 PaddleOCR 3 easyocr 4 muggle ocr 5 dddd ocr 6 其他 工作生活中经常会遇到需要提取图片中文字信息的情况 xff0c 以前都是手动自己把图片里的字敲出来 xff0c
  • WSL使用中遇到坑

    1 开机启动配置项 在WSL中配置的一些服务如nginx xff0c mysql xff0c ssh等 xff0c 每次开机都会需要手动开启 xff0c 参考网上的开机服务配置都是通过往 etc rc local里面添加启动脚本 xff0c
  • 云服务器Ubuntu(无桌面)安装远程桌面

    如果主机上安装的ubuntu是桌面版 xff0c 打开桌面共享即可使用Windows的远程桌面进行链接 详细参考ubuntu20 10中设置桌面共享的三种方式 任选其一 的第一部分 本文主要说明如何在Ubuntu云服务器上安装远程桌面 一
  • win10解决photoshop打不开问题

    win10 的权限跟win7有些地方不一样 xff0c 对于一直使用win7的人可能很不习惯 xff0c 我在win10上面用photoshop的时候 xff0c 出现打不开photoshop的时候 xff0c 如果你也有类似的情况 xff
  • iOS UIAlertController控件

    UIAlertController取代UIAlertView和UIActionSheet xff0c 用于界面弹出一个警告视图 初始化方法 xff0c UIAlertControllerStyle分为UIAlertControllerSty
  • 用递归和非递归实现斐波那契数列(C语言)

    斐波那契数列 xff08 Fibonacci sequence xff09 xff0c 又称黄金分割数列 因数学家列昂纳多 斐波那契 xff08 Leonardoda Fibonacci xff09 以兔子繁殖为例子而引入 xff0c 故又
  • cmd设置全局环境变量和用户环境变量

    register env bat 64 echo off echo add sg generator evn 输出空行echo set generator home 61 cd echo SG GENERATOR HOME generato
  • 如何下载4399游戏到本地并修改数值

    一直很纠结mac不能玩什么游戏 xff0c 只能通过4399来解乏了 8过4399的页面过于臃肿 xff0c 无法安心玩游戏 xff0c 于是有了这个想法 至于修改数值嘛 xff0c 嘿嘿 测试环境 xff1a mac air m1 43
  • g++版本控制,apt安装g++11

    安装g 43 43 11 span class token function sudo span add apt repository y ppa ubuntu toolchain r test span class token funct

随机推荐