UIImagePickerController从拍照、图库、相册获取图片
iOS 获取图片有三种方法:
1. 直接调用摄像头拍照
2. 从相册中选择
3. 从图库中选择
UIImagePickerController 是系统提供的用来获取图片和视频的接口;
用UIImagePickerController 类来获取图片视频,大体分为以下几个步骤:
1. 初始化UIImagePickerController 类;
2. 设置UIImagePickerController 实例的数据来源类型(下面解释);
3. 设置设置代理;
4. 如果需要做图片修改的话设置allowsEditing =yes。
数据来源类型一共有三种:
enum { UIImagePickerControllerSourceTypePhotoLibrary ,//来自图库 UIImagePickerControllerSourceTypeCamera ,//来自相机 UIImagePickerControllerSourceTypeSavedPhotosAlbum //来自相册 };
if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { NSLog(@"支持相机"); } if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { NSLog(@"支持图库"); } if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) { NSLog(@"支持相片库"); }
- (void)viewDidLoad { [super viewDidLoad]; picker = [[UIImagePickerController alloc]init]; picker.view.backgroundColor = [UIColor orangeColor]; UIImagePickerControllerSourceType sourcheType = UIImagePickerControllerSourceTypeCamera; picker.sourceType = sourcheType; picker.delegate = self; picker.allowsEditing = YES; }
[self presentViewController:picker animated:YES completion:nil];
UIImagePickerControllerDelegate
代理中一共三个方法 其中一个3.0 已经废弃了,只剩下两个我们需要用的
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
字典中的键:
获取最近的一张图片
最近的需求需要我模仿微信聊天提示最新的一张图片这个功能。
先讲讲思路。
思路很简单,点击“+”号的时候获取相册列表,获取最新保存的一张图片。根据图片保存时间,与当前时间戳进行计算,获得间隔时间。从而判断是否是需求的时间间隔。(时间间隔自定义)
计算公式:当前时间 - 图片保存时间 <= 时间间隔
那么根据这个思路就开始写一个分类。
它是关于ALAssetsLibrary的获取功能,那么就根据他写一个分类。
但是在iOS9后这个库过时了,不过还是将他封装一份,到时候新建一个工具类进行适配就行了。
//ALAssetsLibrary+WJ.h #import <AssetsLibrary/AssetsLibrary.h> @interface ALAssetsLibrary (WJ) /** * 获取最新一张图片 * * @param block 回调 */ - (void)latestAsset:(void(^_Nullable)(ALAsset * _Nullable asset,NSError *_Nullable error)) block; @end //ALAssetsLibrary+WJ.m #import "ALAssetsLibrary+WJ.h" @implementation ALAssetsLibrary (WJ) - (void)latestAsset:(void (^)(ALAsset * _Nullable, NSError *_Nullable))block { [self enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { if (group) { [group setAssetsFilter:[ALAssetsFilter allPhotos]]; [group enumerateAssetsWithOptions:NSEnumerationReverse/*遍历方式*/ usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { if (result) { if (block) { block(result,nil); } *stop = YES; } }]; *stop = YES; } } failureBlock:^(NSError *error) { if (error) { if (block) { block(nil,error); } } }]; } @end
//PHAsset+WJ.h #import <Photos/Photos.h> @interface PHAsset (WJ) /** * 获取最新一张图片 */ + (PHAsset *)latestAsset; @end //PHAsset+WJ.m #import "PHAsset+WJ.h" @implementation PHAsset (WJ) + (PHAsset *)latestAsset { // 获取所有资源的集合,并按资源的创建时间排序 PHFetchOptions *options = [[PHFetchOptions alloc] init]; options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]]; PHFetchResult *assetsFetchResults = [PHAsset fetchAssetsWithOptions:options]; return [assetsFetchResults firstObject]; } @end
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。