
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中ios 打开相册,info 是一个字典。
字典中的键:
获取最近的一张图片
最近的需求应该我模仿微信聊天提示最新的一张图片这个功能。
先讲讲思路。

思路很简单ios 打开相册,点击“+”号的之后获得相册列表,获取最新保存的一张图片。根据照片保存时间,与当前时间戳进行计算,获得间隔时间。从而判定是否是意愿的时间间隔。(时间间隔自定义)
计算公式:当前时间 - 图片保存时间 <= 时间间隔
那么按照这个想法就起初写一个分类。
它是关于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)里面获得到。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-121437-1.html
声音好苏爱你