iOS中UIImagePickerController图片选取器的用法小结

UIImagePickerController用于管理可自定义的,系统支持的用于获取设备上图片和视频的用户界面。同时可以用于在App中选择存储的图片和视频。一个UIImagePickerController管理用户交互并且将这些交互结果传递给一个代理对象。该类不能被继承和修改,除了自定义cameraOverlayView外。

先简单讲解下UIImagePickerController的一些属性,再上代码。

一、常用属性

(1)sourceType 控制器展示的选择界面的类型,

包含三个枚举值

代码如下:

enum {
   UIImagePickerControllerSourceTypePhotoLibrary,      //在图片库中选取图片或者视频
   UIImagePickerControllerSourceTypeCamera,            //用于拍摄照片或视频
   UIImagePickerControllerSourceTypeSavedPhotosAlbum   //在相册中选取图片或视频
};
typedef NSUInteger UIImagePickerControllerSourceType;

(2)mediaTypes

默认值是kUTTypeImage,意味着用户只能选择静态图片或者拍摄静态图片(相对于视频)

当mediaTypes设置为kUTTypeImage,kUTTypeMovie(设备支持的话)时,操作图片的同时,可以选择操作视频。

使用KUTTypeImage,KUTTypeMovie时,需导入#import <MobileCoreServices/MobileCoreServices.h>

(3)allowEditing

用户是否可以修改图片或视频,默认是NO

(3)cameraOverlayView

在默认图片选择界面的最前面显示。

二、基本用法

(1)使用isSourceTypeAvailable:来判断当前设备是否支持该SourceType

(2)若支持,使用availableMediaTypesForSourceType来检验当前SourceType下支持的mediaTypes

(3)若需要调整mediaTypes(默认是kUTTypeImage),调整

(4)展示界面,使用modal方式弹出。

(5)当用户操作完成(cancel或者选着了某张图片和某个视频),代理会触发方法,然后关闭界面并进行相关的处理。

三、其他两种sourceType详解

其他两种sourceType使用方式较为单一,下面详细讲解下当SourceType为UIImagePickerControllerSourceTypeCamera时的情况。

常见属性:

(1)videoQuality:用于设置视频的质量,默认值为UIImagePickerControllerQualityTypeMedium.

用于拍摄视频和选着视频,如果选择已经存在的视频,且该视频的质量高于设置的videoQuality,则视频会被转为低质量的

(如果存在的视频地狱videoQuality呢)

(2)videoMaximumDuration 最大的视频时间,默认为10分钟

(3)cameraViewTransform

‍这几个属性只在camera下可用

(4)cameraDevice

代码如下:

enum {
   UIImagePickerControllerCameraDeviceRear,  //后置摄像头
   UIImagePickerControllerCameraDeviceFront  //前置摄像头
};
typedef NSUInteger UIImagePickerControllerCameraDevice;

(5)cameraCaptureMode

开启照相界面的时候选择的模式

代码如下:

enum {
   UIImagePickerControllerCameraCaptureModePhoto,  //默认使用拍照模式
   UIImagePickerControllerCameraCaptureModeVideo   //默认使用摄像模式
};
typedef NSUInteger UIImagePickerControllerCameraCaptureMode;

(6)cameraFlashMode

闪光灯

代码如下:

enum {
   UIImagePickerControllerCameraFlashModeOff  = -1,
   UIImagePickerControllerCameraFlashModeAuto = 0,
   UIImagePickerControllerCameraFlashModeOn   = 1
};

typedef NSInteger UIImagePickerControllerCameraFlashMode;

四、两个主要的委托方法实例


代码如下:

// 用户选中图片之后的回调
- (void)imagePickerController: (UIImagePickerController *)picker didFinishPickingMediaWithInfo: (NSDictionary *)info 

    if (picker == picker_camera_)  
    { 
        //如果是 来自照相机的image,那么先保存 
        UIImage* original_image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
    }

// info dictionary keys
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaType;      // an NSString (UTI, i.e. kUTTypeImage)
UIKIT_EXTERN NSString *const UIImagePickerControllerOriginalImage;  // a UIImage
UIKIT_EXTERN NSString *const UIImagePickerControllerEditedImage;    // a UIImage
UIKIT_EXTERN NSString *const UIImagePickerControllerCropRect;       // an NSValue (CGRect)
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaURL;       // an NSURL
UIKIT_EXTERN NSString *const UIImagePickerControllerReferenceURL    NS_AVAILABLE_IOS(4_1);  // an NSURL that references an asset in the AssetsLibrary framework
UIKIT_EXTERN NSString *const UIImagePickerControllerMediaMetadata   NS_AVAILABLE_IOS(4_1);  // an NSDictionary containing metadata from a captured photo

// 获得编辑过的图片 
    UIImage* image = [info objectForKey: @"UIImagePickerControllerEditedImage"];

// 把图片转成NSData类型的数据来保存文件(存入到沙盒中) 
    NSData *imageData;

// 判断图片是不是png格式的文件 
    if (UIImagePNGRepresentation(image)) {

// 返回为png图像。 
        imageData = UIImagePNGRepresentation(image);

}else {

// 返回为JPEG图像
        imageData = UIImageJPEGRepresentation(image, 1.0);

}

// 路径拼接,写入-----
    NSString * imageSavePath = [[[HMTMySqliteDataHandle shareInstance]saveImagesPath] stringByAppendingPathComponent:@"自定义.自定义"];

[imageData writeToFile:imageSavePath atomically:YES];

// 关闭相册界面  
    [self dismissModalViewControllerAnimated:YES]; 
    [picker release]; 
}

// 用户选择取消 
- (void) imagePickerControllerDidCancel: (UIImagePickerController *)picker 

    // 关闭相册界面
    [self dismissModalViewControllerAnimated:YES]; 
    [picker release]; 
}

(0)

相关推荐

  • iOS开发中使用Quartz2D绘图及自定义UIImageView控件

    绘制基本图形 一.简单说明 图形上下文(Graphics Context):是一个CGContextRef类型的数据 图形上下文的作用:保存绘图信息.绘图状态 决定绘制的输出目标(绘制到什么地方去?)(输出目标可以是PDF文件.Bitmap或者显示器的窗口上) 相同的一套绘图序列,指定不同的Graphics Context,就可将相同的图像绘制到不同的目标上. Quartz2D提供了以下几种类型的Graphics Context: Bitmap Graphics Context PDF Grap

  • IOS中UIImageView方法实现简单动画

    IOS中UIImageView方法实现简单动画 查阅UIImageView文档时,发现UIImageView有一组关于动画的方法/参数,可以实现简单的动画.包括: animationImages; highlightedAnimationImages; animationDuration; animationRepeatCount; - startAnimating; - stopAnimating; - isAnimating; 上面的这组方法很简单,一目了然:设置好动画的图片.动画时间.重复

  • IOS UIImagePickerController从拍照、图库、相册获取图片

    IOS UIImagePickerController从拍照.图库.相册获取图片 iOS 获取图片有三种方法: 1. 直接调用摄像头拍照 2. 从相册中选择 3. 从图库中选择 UIImagePickerController 是系统提供的用来获取图片和视频的接口: 用UIImagePickerController 类来获取图片视频,大体分为以下几个步骤: 1. 初始化UIImagePickerController 类: 2. 设置UIImagePickerController 实例的数据来源类型

  • iOS UIImageView图片自动拉伸功能

    本文实例为大家分享了iOS图片自动拉伸的具体代码,供大家参考,具体内容如下 这个是使用一个切片,使其填充到整个NavigationBar上面. - (void)viewDidLoad { [super viewDidLoad]; UIImage *smallImage = [UIImage imageNamed:@"hc_03.png"]; UIImageView *imageView = [[UIImageView alloc] initWithImage:smallImage];

  • iOS中UIImagePickerController图片选取器的用法小结

    UIImagePickerController用于管理可自定义的,系统支持的用于获取设备上图片和视频的用户界面.同时可以用于在App中选择存储的图片和视频.一个UIImagePickerController管理用户交互并且将这些交互结果传递给一个代理对象.该类不能被继承和修改,除了自定义cameraOverlayView外. 先简单讲解下UIImagePickerController的一些属性,再上代码. 一.常用属性 (1)sourceType 控制器展示的选择界面的类型, 包含三个枚举值 复

  • JS解决IOS中拍照图片预览旋转90度BUG的问题

    上篇文章[Js利用Canvas实现图片压缩功能]中做了图片压缩上传,但是在IOS真机测试的时候,发现图片预览的时候自动逆时针旋转了90度.对于这个bug,我完全不知道问题出在哪里,接下来就是面向百度编程了.通过度娘找到了相关资料,解决方法记录在此.这个问题的具体因素其实我还是不清楚是为何导致的,只有IOS和部分三星手机会出现此bug. 绝大部分的安卓机并无此问题. 解决此问题需要引入一个第三方 JS 库: exif.js 下载地址:https://github.com/exif-js/exif-

  • 网页中的图片查看器viewjs使用方法

    需求分析: 对于网页中的图片进行连续放大(便于用户清晰查看内容).缩小,旋转等操作,可以使用viewjs图片查看器插件实现. viewjs官方网址:https://github.com/fengyuanchen/viewerjs 具体使用方法请参照官网说明. 下面做2个简单的示例: 1.示例一:单一图片 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"

  • iOS中实现图片自适应拉伸效果的方法

    前言 在Android中实现图片的拉伸特别特别简单,甚至不用写一行代码,直接使用.9图片进行划线即可.但是iOS就没这么简单了,比如对于下面的一张图片(原始尺寸:200*103): 我们不做任何处理,直接将它用作按钮的背景图片: // // ViewController.m // ChatBgTest // // Created by 李峰峰 on 2017/1/23. // Copyright © 2017年 李峰峰. All rights reserved. // #import "View

  • js图片查看器插件用法示例

    本文实例讲述了js图片查看器插件.分享给大家供大家参考,具体如下: 首先 在github上下载 js,css点击打开链接 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="../css/

  • IOS中实现图片点击全屏预览

    如果你感觉累,那就对了那是因为你在走上坡路..这句话似乎有点道理的样子,时常提醒自己无论走到哪都不要忘记自己当初为什么出发.有时想想感觉有的东西可以记录一下,就把它记录下来吧,这次想写一下关于单张图片点击全屏预览的问题,网上查了一些大神写的有的功能确实很强大但自己暂时想要的只是简单的功能就好,还有些方法自己也没弄出想要的效果,最后写了一个比较简单的点击单张图片的全屏预览和双指捏合缩小放大,可能有时要对图片做一些处理,这里放大后只是显示同一张图片并未做处理,下面直接贴出代码 // // ViewC

  • 详解Python的Twisted框架中reactor事件管理器的用法

    铺垫 在大量的实践中,似乎我们总是通过类似的方式来使用异步编程: 监听事件 事件发生执行对应的回调函数 回调完成(可能产生新的事件添加进监听队列) 回到1,监听事件 因此我们将这样的异步模式称为Reactor模式,例如在iOS开发中的Run Loop概念,实际上非常类似于Reactor loop,主线程的Run Loop监听屏幕UI事件,一旦发生UI事件则执行对应的事件处理代码,还可以通过GCD等方式产生事件至主线程执行. 上图是boost对Reactor模式的描绘,Twisted的设计就是基于

  • Android的OkHttp包中的HTTP拦截器Interceptor用法示例

    OkHttp(GitHub:https://github.com/square/okhttp) 的 Interceptor 就如同名称「拦截器」一样,拦截你的 Request 做一些你想做的事情再送出去.例如: 1.自动加上使用者目前使用的语言送出去取得对应语言的回传内容. 2.将 Request 计算出这个 Request 的 sigunature 再附加上送出去. 在 okHttp 中分成 Application Interceptor 和 Network Interceptor 两种. A

  • iOS中的NSURLCache数据缓存类用法解析

    在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在IOS设备中加一个缓存的机制.使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求.下面将介绍如何在IOS设备中进行缓存. 内存缓存我们可以使用sdk中的NSURLCache类.NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型.    1.NSUR

  • iOS中Runtime的几种基本用法记录

    Runtime 介绍 这不是一遍介绍关于Runtime实现细节的文章,而是怎么利用Objective-C提供的Runtime API进行开发的文章! Objective-C拥有相当多的动态特性,这些特性在运行程序时候发挥作用. Objctive-C Runtime是个运行时的库,由C和汇编实现.通过Runtime封装的C结构体和函数可以在程序运行时创建.检查和修改类以及对象及其方法,甚至可以替换或交换方法的实现. 下面记录一下关于Runtime的一些基本用法 1)消息机制 在OOP术语中,消息传

随机推荐