运行效果
#import "ViewController.h"
#import <MobileCoreServices/MobileCoreServices.h>
#import <AVKit/AVKit.h>
#import <AVFoundation/AVFoundation.h>
//两个协议 一个 采集图片 另一个是 显示图片
@interface ViewController ()<UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@property(strong, nonatomic) UIImagePickerController *imagePickerCon;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
//懒加载
- (UIImagePickerController *) imagePickerCon {
if(!_imagePickerCon) {
_imagePickerCon = [[UIImagePickerController alloc] init];
//采集源类型
_imagePickerCon.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
//媒体类型
_imagePickerCon.mediaTypes = [NSArray arrayWithObject:(__bridge NSString *)kUTTypeImage];
//设置代理
_imagePickerCon.delegate = self;
}
return _imagePickerCon;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (IBAction)buttonClick:(id)sender {
//通过摄像头采集,并检测摄像头是否可用
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
self.imagePickerCon.sourceType = UIImagePickerControllerSourceTypeCamera;
} else {
//通过图片库采集
self.imagePickerCon.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
[self presentViewController:self.imagePickerCon animated:YES completion:nil];
}
//完成采集图片的会调
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info{
//获取媒体类型 从info中
NSString *type = info[UIImagePickerControllerMediaType];
//判断是否是图片类型
if([type isEqualToString:(__bridge NSString *)kUTTypeImage]){
//采集到的图片
UIImage *image = info[UIImagePickerControllerOriginalImage];
//显示到UI界面
self.imageView.image = image;
}
[self dismissViewControllerAnimated:YES completion:nil];
}
//取消采集图片的处理
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
NSLog(@"取消采集图片");
[self dismissViewControllerAnimated:YES completion: nil];
}
@end