在实际的APP开发中,我们经常会见到应用的这样的功能 :需要选取手机相册的照片,还有选取视频,拍视频和照相的操作.
在iOS开发中,实现以上的功能就需要用到 UIImagePickerController.
现将 UIImagePickerController的基本用法总结如下 :
#import "ViewController.h"
@interface ViewController ()
//拍照
(IBAction)takePhoto:(id)sender;
//拍电影
(IBAction)takeMovie:(id)sender;
@property (weak, nonatomic) IBOutlet UIImageView *imgView;
//选择照片
(IBAction)selectPhoto:(id)sender;
//选择视频
(IBAction)selectVideo:(id)sender;
@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(@"照片保存到相册成功");
}
这种写法的缺点就是,选取图片的时候只能选取一张照片,如果要选取多张照片的话,就需要用到另外一种方法 AssetsLibrary
AssetsLibrary的基本用法随后更新!!! 记得关注我哟!!!!
手机扫一扫
移动阅读更方便
你可能感兴趣的文章