在实际的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. Spring MVC 学习笔记(二)

    6. 视图和视图解析器  ❤  Spring MVC如何解析视图                                  • 请求处理方法执行完成后,最终返回一个ModelAndView对象 ...

  2. Nutch2.1+mysql+solr3.6.1+中文网站抓取

    1.mysql 数据库配置 linux mysql安装步骤省略. 在首先进入/etc/my.cnf (mysql为5.1的话就不用修改my.cnf,会导致mysql不能启动)在[mysqld] 下添加 ...

  3. 约瑟夫问题O(n)/O(mlogn)

    题面 略 题解 约瑟夫问题.编号000~n−1n-1n−1,每次拿第mmm个. O(n)O(n)O(n):f[n]f[n]f[n]表示幸存的人的编号,f[n]=(f[n−1]+m)%nf[n]=(f[ ...

  4. BZOJ3331 压力 (圆方树+树上差分)

    题意 略 题解 求路径上的割点. 然后就直接圆方树上差分 CODE #include <bits/stdc++.h> using namespace std; inline void rd ...

  5. HDU-1398-Square Coins(母函数)

    链接: https://vjudge.net/problem/HDU-1398 题意: People in Silverland use square coins. Not only they hav ...

  6. Microsoft.Jet.OLEDB.4.0读取EXCEL数据

    用Microsoft.Jet.OLEDB.4.0读取EXCEL数据的代码是这样的:     string ConnStr="Provider=Microsoft.Jet.OLEDB.4.0; ...

  7. 数据结构实验之图论三:判断可达性(SDUT 2138)(简单DFS)

    #include <bits/stdc++.h> using namespace std; int gra[1002][1005]; int vis[1002]; int n,m; voi ...

  8. ERROR: node with name "rabbit" already running on "localhost"

    rabbitmqctl start_app启动没有这个问题

  9. 由Java正则表达式的灾难性回溯引发的高CPU异常:java.util.regex.Pattern$Loop.match

    问题与分析 某天领导report了一个问题:线上的CPU自从上一个版本迭代后就一直处于居高不下的状况,领导看着这段时间的曲线图判断是有两条线程在不停的死循环. 接到任务后去查看了AWS的CloudWa ...

  10. 快速打造自己的PHPStorm主题

    ---恢复内容开始--- 一个优雅和舒适的界面,可以增加过多写入代码的动力. Phpstorm小型的白色主题比较简陋.为了打造一个优雅和舒适的界面,我们安装一件叫Material Theme UI的插 ...