iOS App中调用相册中图片及获取最近的一张图片的方法
iOS App中调用相册中图片及获取最近的一张图片的方法
发布时间:2016-12-28 来源:查字典编辑
摘要:UIImagePickerController从拍照、图库、相册获取图片iOS获取图片有三种方法:1.直接调用摄像头拍照2.从相册中选择3....

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;

}

上面只是实例了UIImagePickerController及其属性 在需要获取图片的时候需要弹出窗口调用

复制代码 代码如下:

[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;

选取的信息都在info中,info 是一个字典。

字典中的键:

NSString *const UIImagePickerControllerMediaType ;指定用户选择的媒体类型(文章最后进行扩展) NSString *const UIImagePickerControllerOriginalImage ;原始图片 NSString *const UIImagePickerControllerEditedImage ;修改后的图片 NSString *const UIImagePickerControllerCropRect ;裁剪尺寸 NSString *const UIImagePickerControllerMediaURL ;媒体的URL NSString *const UIImagePickerControllerReferenceURL ;原件的URL NSString *const UIImagePickerControllerMediaMetadata;当来数据来源是照相机的时候这个值才有效

获取最近的一张图片

最近的需求需要我模仿微信聊天提示最新的一张图片这个功能。

先讲讲思路。

思路很简单,点击“+”号的时候获取相册列表,获取最新保存的一张图片。根据图片保存时间,与当前时间戳进行计算,获得间隔时间。从而判断是否是需求的时间间隔。(时间间隔自定义)

计算公式:当前时间 - 图片保存时间 <= 时间间隔

那么根据这个思路就开始写一个分类。

它是关于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

在iOS8 PhotoKit已经存在了。所以以后写iOS8以上的应用可以直接使用。

PhotoKit简单实用封装。具体详细性能请看参考提供的链接。

复制代码 代码如下:

//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

根据需求本文章不提供其他功能写法(ps:最主要本人也才刚使用>.<)。

图片保存时间 都可以在对应的asset(PHAsset,AlAsset)里面获取到。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新IOS开发学习
热门IOS开发学习
编程开发子分类