前言
调用相机拍照并获取图片和打开系统相册获取图片是我们经常见到的常用功能。其实这些功能做起来十分简单,几步即可。
第一步,添加权限
在info.plist文件中添加对照相机和相册获取的权限,如下图
第二步,使用UIImagePickerController
初始化UIImagePickerController ,并添加相应设置,如下
@property (strong, nonatomic) UIImagePickerController *picker;
------------------------------------------------------------
self.picker.delegate = self;
self.picker.allowsEditing = YES;
------------------------------------------------------------
- (UIImagePickerController *)picker
{
if (!_picker) {
_picker = [[UIImagePickerController alloc]init];
}
return _picker;
}
第三步,添加代理
需要添加UIImagePickerControllerDelegate和UINavigationControllerDelegate这两个代理,并在代理中实现相应方法,如下
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
// 获取图片
UIImage *image = info[UIImagePickerControllerOriginalImage];
self.image.image = image;
// 获取图片后返回
[picker dismissViewControllerAnimated:YES completion:nil];
}
//按取消按钮时候的功能
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
// 返回
[picker dismissViewControllerAnimated:YES completion:nil];
}
最后一步,实现方法
根据不同的需求设置类型即可,如下:
- (IBAction)buttonAction:(UIButton *)sender {
BOOL isPicker = NO;
switch (sender.tag) {
case 10000:
// 打开相机
isPicker = true;
// 判断相机是否可用
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
self.picker.sourceType = UIImagePickerControllerSourceTypeCamera;
isPicker = true;
}
break;
case 10001:
// 打开相册
self.picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
isPicker = true;
break;
default:
self.picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
isPicker = true;
break;
}
if (isPicker) {
[self presentViewController:self.picker animated:YES completion:nil];
}else {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"错误" message:@"相机不可用" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:nil];
[alert addAction:action];
[self presentViewController:alert animated:YES completion:nil];
}
}
希望这篇文章对各位看官有所帮助,Demo下载地址:Demo