在实际的APP开发中,我们经常会见到应用的这样的功能 :需要选取手机相册的照片,还有选取视频,拍视频和照相的操作.

在iOS开发中,实现以上的功能就需要用到 UIImagePickerController.

现将 UIImagePickerController的基本用法总结如下 :

 #import "ViewController.h"

 @interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>

 //拍照
- (IBAction)takePhoto:(id)sender; //拍电影
- (IBAction)takeMovie:(id)sender; @property (weak, nonatomic) IBOutlet UIImageView *imgView; //选择照片
- (IBAction)selectPhoto:(id)sender; //选择视频
- (IBAction)selectVideo:(id)sender; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; //UIImagePickerController.访问用户相册 2.拍照,拍视频 } //1.选取照片
- (IBAction)selectPhoto:(id)sender { UIImagePickerController *imagePickerCtrl = [[UIImagePickerController alloc] init]; /*
UIImagePickerControllerSourceTypePhotoLibrary,获取相册中所有的文件
UIImagePickerControllerSourceTypeCamera,摄像头
UIImagePickerControllerSourceTypeSavedPhotosAlbum,系统内置相册
*/ //资源类型(资源来自哪里,可以来相册,摄像头)
imagePickerCtrl.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; //设置代理
imagePickerCtrl.delegate = self; //弹出控制器
[self presentViewController:imagePickerCtrl animated:YES completion:^{ //弹出控制器完成调用的方法
}]; }
/**
*
* 2.选取视频
*/
- (IBAction)selectVideo:(id)sender { UIImagePickerController *imagePickerCtrl = [[UIImagePickerController alloc] init]; imagePickerCtrl.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
imagePickerCtrl.delegate = self; //指定媒体类型,图片(@"public.image"),视频(@"public.movie")
imagePickerCtrl.mediaTypes = @[/*@"public.image",*/@"public.movie"]; [self presentViewController:imagePickerCtrl animated:YES completion:NULL]; } //3.拍照
- (IBAction)takePhoto:(id)sender { UIImagePickerController *imagePickerCtrl = [[UIImagePickerController alloc] init]; imagePickerCtrl.delegate = self; //判断手机是否支持(前)摄像头
if (![UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront]) { UIAlertView *alerView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"手机太渣,没有摄像头" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alerView show]; return;
} //指定资源来自摄像头
imagePickerCtrl.sourceType = UIImagePickerControllerSourceTypeCamera; [self presentViewController:imagePickerCtrl animated:YES completion:NULL]; } //4.拍视频
- (IBAction)takeMovie:(id)sender { UIImagePickerController *imagePickerCtrl = [[UIImagePickerController alloc] init]; imagePickerCtrl.delegate = self; //指定资源来自摄像头
imagePickerCtrl.sourceType = UIImagePickerControllerSourceTypeCamera; //设置资源类型
imagePickerCtrl.mediaTypes = @[@"public.movie"]; [self presentViewController:imagePickerCtrl animated:YES completion:NULL];
} #pragma mark UIImagePickerControllerDelegate
//选取完视频,或者照片调用的协议方法(不管是拍照,选相册,拍视频,选视频,最终都会调用此方法)
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSLog(@"%@",info); //取出选择的照片
UIImage *img = info[UIImagePickerControllerOriginalImage]; //将选取的照片交给_imgView显示
_imgView.image = img; //如果资源来自摄像头
if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { //将图片存到相册中调用的方法 (苹果建议的写法:好像必须要这样写)
//- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo UIImageWriteToSavedPhotosAlbum(img, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
} //如果选中的是视频则可以通过UIImagePickerControllerMediaURL在字典中获取到选中的视频的URL //选取照片或视频后,关闭控制器
[picker dismissViewControllerAnimated:YES completion:NULL]; } //"取消"按钮被点击
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { NSLog(@"被关闭了");
[picker dismissViewControllerAnimated:YES completion:NULL]; } - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{ NSLog(@"照片保存到相册成功");
} @end

这种写法的缺点就是,选取图片的时候只能选取一张照片,如果要选取多张照片的话,就需要用到另外一种方法  AssetsLibrary

AssetsLibrary的基本用法随后更新!!!    记得关注我哟!!!!

UIImagePickerController的用法的更多相关文章

  1. 给iOS开发新手送点福利,简述UIImagePickerController的属性和用法

    1.+(BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType;         // 检查指定源是否在设备上 ...

  2. ios开发 <AppName>-Prefix.pch文件的用法详解

    我们知道,每新建立一个工程,比如说HelloWord,在分类SupportingFiles里都会有一个以工程名开头-Prefix.pch结尾的文件,如HelloWord-Prefix.pch.对于这个 ...

  3. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  4. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  5. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  6. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  7. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  8. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  9. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

随机推荐

  1. vulkan load store and memoryless

    https://www.jendrikillner.com/article_database/ https://community.arm.com/developer/tools-software/g ...

  2. python中的lambda()函数

    语句:print map(lambda x:x ** 2,[1,2,3,4,5]) 其中lambda()函数在Python文档,文档中解释如下: lambda An anonymous inline ...

  3. Base 编解码(转)

    private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0 ...

  4. LightOJ - 1214-Large Division(数学,同余)

    链接: https://vjudge.net/problem/LightOJ-1214 题意: Given two integers, a and b, you should check whethe ...

  5. HTML 002 基础

    HTML 基础- 4个实例 HTML 标题 HTML 标题(Heading)是通过<h1> - <h6> 标签来定义的. 实例 <h1>这是一个标题</h1& ...

  6. E:first-of-type

    E:first-of-type 语法: E:first-of-type { sRules } 说明: 匹配同类型中的第一个同级兄弟元素E.大理石平台[1200mm*1000mm*150mm] 要使该属 ...

  7. 对url路径中的参数进行加密--Java

    需求: 后台对一些比较敏感的参数进行数据加密,然后在传送到前端.当前端跳转到后台时,再由后台对其进行解密. 参考 针对url参数的加密解密算法(java版) 修改:对中间的js页面加密代码改写为jav ...

  8. 小程序官方基础项目api请求

    onLaunch: function () { // 展示本地存储能力 var logs = wx.getStorageSync('logs') || [] logs.unshift(Date.now ...

  9. Gym - 102346G Getting Confidence 最小费用最大流

    Gym - 102346GGetting Confidence 题意:n*n的格子,每个格子上有一个数,要求每行每列都只能拿一个数,使得乘积最大,然后输出每列选择的是第几行的数. 如果是加法的话,那么 ...

  10. [USACO08FEB]酒店Hotel 线段树

    [USACO08FEB]酒店Hotel 线段树 题面 其实就是区间多维护一个lmax,rmax(表示从左开始有连续lmax个空房,一直有连续rmax个空房到最右边),合并时讨论一下即可. void p ...