iOS:图像选取器控制器控件UIImagePickerController的详解
图像选择控制器:UIImagePickerController
功能:用于选取相册或相机等里面的照片。
@interface UIImagePickerController : UINavigationController
枚举:
//图片资源来源类型
typedef NS_ENUM(NSInteger, UIImagePickerControllerSourceType) {
UIImagePickerControllerSourceTypePhotoLibrary, //图库
UIImagePickerControllerSourceTypeCamera, //相机
UIImagePickerControllerSourceTypeSavedPhotosAlbum //相册
};
//摄像图像的质量
typedef NS_ENUM(NSInteger, UIImagePickerControllerQualityType) {
UIImagePickerControllerQualityTypeHigh = 0, // 高质量
UIImagePickerControllerQualityTypeMedium = 1, //中等质量,适合通过Wi-Fi传输
UIImagePickerControllerQualityTypeLow = 2, // 最低的质量,适合通过蜂窝网络传输
UIImagePickerControllerQualityType640x480 = 3, // VGA质量,640*480分辨率
UIImagePickerControllerQualityTypeIFrame1280x720 = 4, // VGA质量1280*720分辨率
UIImagePickerControllerQualityTypeIFrame960x540 = 5 // VGA质量,960*540分辨率
};
//相机摄像模式
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraCaptureMode) {
UIImagePickerControllerCameraCaptureModePhoto, //图片
UIImagePickerControllerCameraCaptureModeVideo //录像
};
//摄像头位置
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraDevice) {
UIImagePickerControllerCameraDeviceRear, //后摄像头
UIImagePickerControllerCameraDeviceFront //前摄像头
};
//闪光灯状态模式
typedef NS_ENUM(NSInteger, UIImagePickerControllerCameraFlashMode) {
UIImagePickerControllerCameraFlashModeOff = -1, //关闭状态
UIImagePickerControllerCameraFlashModeAuto = 0, //自动调节状态
UIImagePickerControllerCameraFlashModeOn = 1 //开启状态
};
图片信息中字典的键:
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaType; //用户自定义的媒体类型
UIKIT_EXTERN NSString *const UIImagePickerControllerOriginalImage; // 原始的图片
UIKIT_EXTERN NSString *const UIImagePickerControllerEditedImage; // 编辑后的图片
UIKIT_EXTERN NSString *const UIImagePickerControllerCropRect; // 裁剪尺寸
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaURL; // 媒体URL
UIKIT_EXTERN NSString *const UIImagePickerControllerReferenceURL; // 原件URL
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaMetadata // 仅有效于拍摄图片时
属性:
//图像选取代理
@property(nonatomic,assign) id <UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate;
//图片资源来源类型,默认来自图库
@property(nonatomic)UIImagePickerControllerSourceType sourceType;
//媒体类型数组
@property(nonatomic,copy)NSArray *mediaTypes;
//是否允许编辑图像,默认为NO
@property(nonatomic) BOOL allowsEditing ;
@property(nonatomic) BOOL allowsImageEditing ;
//录像最大时长,默认为10分钟
@property(nonatomic) NSTimeInterval videoMaximumDuration;
//录像质量
@property(nonatomic) UIImagePickerControllerQualityType videoQuality ;
//是否显示相机控制界面,默认显示
@property(nonatomic) BOOL showsCameraControls ;
//设置视图覆盖预览视图
@property(nonatomic,retain) UIView *cameraOverlayView ;
//相机视图仿射类型
@property(nonatomic) CGAffineTransform cameraViewTransform ;
//相机摄像模式,默认为拍摄图片
@property(nonatomic) UIImagePickerControllerCameraCaptureMode cameraCaptureMode ;
//摄像头选取,默认为后摄像头
@property(nonatomic) UIImagePickerControllerCameraDevice cameraDevice ;
//闪光灯状态模式
@property(nonatomic) UIImagePickerControllerCameraFlashMode cameraFlashMode;
方法:
//资源来源类型是否可用
+ (BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType;
//返回资源来源类型中可用的媒体类型数组
+ (NSArray *)availableMediaTypesForSourceType:(UIImagePickerControllerSourceType)sourceType;
//摄像头是否可用
+ (BOOL)isCameraDeviceAvailable:(UIImagePickerControllerCameraDevice)cameraDevice ;
//闪光灯是否可用
+ (BOOL)isFlashAvailableForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice ;
//返回可用的相机模式数组
+ (NSArray *)availableCaptureModesForCameraDevice (UIImagePickerControllerCameraDevice)
cameraDevice;
//照相
- (void)takePicture;
//开始录频
- (BOOL)startVideoCapture ;
//停止录频
- (void)stopVideoCapture ;
代理:
@protocol UIImagePickerControllerDelegate<NSObject>
@optional
//选取编辑过的图片
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo ;
//选取原始图片
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
//取消选取
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
@end
保存相关的函数:
// 保存图片到被保存的相册中
UIKIT_EXTERN void UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);
// - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo;
// 保存指定路径的录频到被保存的相册中
UIKIT_EXTERN BOOL UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(NSString *videoPath) ;
// 保存录频到被保存的相册中
UIKIT_EXTERN void UISaveVideoAtPathToSavedPhotosAlbum(NSString *videoPath, id completionTarget, SEL completionSelector, void *contextInfo);
//- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo;
下面来举一个实例如下:从本地相册读取显示图片
1、设置故事板,往故事板的视图中拖入两个控件,一个是UIImageView,另一个是UIButton,分别命名为imageView、“相册”。

2、将imageView关联IBOutLet到控制器类中作为属性,给"相册"按钮关联IBAction事件,用来显示功能。还要让类实现图像选取器控制器协议和导航控制器协议


3、现在就是显示功能的实现和协议方法的实现了。
//按钮事件,打开相册(以模态窗口的形式显示相册)
- (IBAction)buttonClicked:(UIButton *)sender
{
//创建图片选取控制器
UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init]; //图片资源来自相册
imagePicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; //设置选取代理
imagePicker.delegate = self; //使用模态窗口显示相册
[self presentViewController:imagePicker animated:YES completion:nil];
} - (void)viewDidLoad {
[super viewDidLoad]; }
//实现协议方法,选取相册中的相片:
#pragma mark -<UIImagePickercontrollerDelegate>
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//NSLog(@"%@",info);
/*info:这个字典中放着图片的具体信息,通过这个字典的键可以获取图片*/
//取出图片
self.image = [info objectForKey:UIImagePickerControllerOriginalImage];//显示图片在图像视图中
[self.imageView setImage:self.image]; //关闭模态窗口
[picker dismissViewControllerAnimated:YES completion:nil];
}
4、演示结果:
开始运行截图: 显示的本地相册截图:

选取某一图片截图: 点击"相册"返回,再选取某一图片截图:

iOS:图像选取器控制器控件UIImagePickerController的详解的更多相关文章
- iOS:提示框(警告框)控件UIAlertView的详解
提示框(警告框)控件:UIAlertView 功能:当点击按钮或标签等时,弹出一个提示框,显示必要的提示,然后通过添加的按钮完成需要的功能. 类型:typedef NS_ENUM(NSInte ...
- 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)
1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...
- iOS:UIPageViewController翻页控制器控件详细介绍
翻页控制器控件:UIPageViewController 介绍: 1.它是为我们提供了一种类似翻书效果的一种控件.我们可以通过使用UIPageViewController控件,来完成类似图书一样的翻页 ...
- iOS:选择器控件UIPickerView的详解和演示
选择器控件UIPickerView: 功能:它能够创建一个类似于密码锁式的单列或多列的选择菜单,用户可以通过它设置的代理来选择需要菜单中的任意的数据.例如创建日历.字体表(类型.大小.颜色).图库等. ...
- iOS:提示框(警告框)控件UIActionSheet的详解
提示框(警告框)控件2:UIActionSheet 功能:当点击按钮或标签等时,弹出一个提示框,显示必要的提示,然后通过添加的按钮完成需要的功能.它与导航栏类似,它继承自UIView. 风格类型: ...
- iOS:下拉刷新控件UIRefreshControl的详解
下拉刷新控件:UIRefreshControl 1.具体类信息: @interface UIRefreshControl : UIControl //继承控制类 - (instancetype)ini ...
- iOS:网页视图控件UIWebView的详解
网页视图控件:UIWebView 功能:它是继承于UIView的,是一个内置的浏览器控件,以用来浏览从网络下载下来的网页或者本地上加载下来的文档. 枚举: //网页视图导航类型 typedef NS_ ...
- delphi控件属性大全-详解-简介
http://blog.csdn.net/u011096030/article/details/18716713 button 组件: CAPTION 属性 :用于在按钮上显示文本内容 Cancel ...
- AnyCAD三维控件场景节点详解
SceneNode是AnyCAD三维图形平台的AnyViz显示引擎的核心对象之一,只有放在场景管理器(SceneManager)里的节点才能被显示引擎所显示. 1. 节点分类 SceneNode是 ...
随机推荐
- MySQL建立高性能索引策略
索引永远是最好的查询解决方案嘛? 索引并不总是最好的工具.总的来说,只有当索引帮助存储引擎快速查找到记录带来的好处大于其带来的额外工作(比如插入操作后索引的维护)时,索引才是高效的. 对于非常小的表: ...
- python标准库之【socket】
socket通常也称作”套接字“.网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket 是网络连接端点.例如当你的Web浏览器请求www.fishc. ...
- SQL Server 连接字符串和身份验证 学习
SQL Server .NET Data Provider 连接字符串包含一个由一些属性名/值对组成的集合.每一个属性/值对都由分号隔开. PropertyName1=Value1; ...
- 微信小程序 - "锚点"功能的实现
“锚点”功能在实际应用设计的好,可以提高用户体验.今天碰到一个类似下面功能: 由于页面数据比较多,除了做些上拉加载,下拉刷新等优化.还可以进行进行分类,如上图.功能要求:点击导航的菜单,相应页面的分类 ...
- 打印之Lodop
前序 前面遇到一个问题:在线打印合同.通过各方查找资料和请教他人,终于完美的解决了这个问题.其中的解决方案,可以查看:http://www.cnblogs.com/zcy-xy/p/4290436.h ...
- ViewPager单页显示3个item
原文地址:https://github.com/hongyangAndroid/MagicViewPager/wiki MagicViewPager 单页显示3个Item的ViewPager炫酷切换效 ...
- thinkphp的where方法的使用
1.Thinkphp中where()条件的使用 总是有人觉得,thinkphp的where()就是写我要进行增加.查询.修改.删除数据的条件,很简单的,其实我想告诉你,where()是写条件语句的,但 ...
- Git常用命令速查手册
Git组成 1.初始化仓库 git init 2.将文件添加到仓库 git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文 ...
- 自定义word快捷键,设置插入图片快捷键
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 自定义word快捷键,设置插入图片快捷键 文件→选项→自定义功能区 选择键盘快捷方式 自 ...
- [P4063][JXOI2017]数列(DP)
题目描述 九条可怜手上有一个长度为 n 的整数数列 ri,她现在想要构造一个长度为 n 的,满足如下条件的整数数列 A: • 1 ≤ Ai ≤ ri. • 对于任意 3 ≤ i ≤ n,令 R 为 A ...