源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

iOS App中调用相册中图片及获取最近的一张图片的方法

  • 时间:2022-03-01 15:38 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:iOS App中调用相册中图片及获取最近的一张图片的方法
[b]UIImagePickerController从拍照、图库、相册获取图片[/b] iOS 获取图片有三种方法: 1. 直接调用摄像头拍照 2. 从相册中选择 3. 从图库中选择 UIImagePickerController 是系统提供的用来获取图片和视频的接口; 用UIImagePickerController 类来获取图片视频,大体分为以下几个步骤: 1. 初始化UIImagePickerController 类; 2. 设置UIImagePickerController 实例的数据来源类型(下面解释); 3. 设置设置代理; 4. 如果需要做图片修改的话设置allowsEditing =yes。 数据来源类型一共有三种:
[u]复制代码[/u] 代码如下:
enum {    UIImagePickerControllerSourceTypePhotoLibrary ,//来自图库    UIImagePickerControllerSourceTypeCamera ,//来自相机    UIImagePickerControllerSourceTypeSavedPhotosAlbum //来自相册 };
在用这些来源的时候最好检测以下设备是否支持;
[u]复制代码[/u] 代码如下:
 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])     {         NSLog(@"支持相机");     }     if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])     {         NSLog(@"支持图库");     }     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])     {         NSLog(@"支持相片库");     }
调用摄像头来获取资源
[u]复制代码[/u] 代码如下:
- (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及其属性 在需要获取图片的时候需要弹出窗口调用
[u]复制代码[/u] 代码如下:
[self presentViewController:picker animated:YES completion:nil];
我们还需要代理来获取我们选中的图片 UIImagePickerControllerDelegate 代理中一共三个方法 其中一个3.0 已经废弃了,只剩下两个我们需要用的
[u]复制代码[/u] 代码如下:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary  *)info;
当用户选取完成后调用;
[u]复制代码[/u] 代码如下:
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
当用户取消选取时调用;
[u]复制代码[/u] 代码如下:
- (void)imagePickerController:(UIImagePickerController *)picker  didFinishPickingMediaWithInfo:(NSDictionary *)info;
选取的信息都在info中,info 是一个字典。 字典中的键: [list] [*]NSString *const  UIImagePickerControllerMediaType ;指定用户选择的媒体类型(文章最后进行扩展)[/*] [*]NSString *const  UIImagePickerControllerOriginalImage ;原始图片[/*] [*]NSString *const  UIImagePickerControllerEditedImage ;修改后的图片[/*] [*]NSString *const  UIImagePickerControllerCropRect ;裁剪尺寸[/*] [*]NSString *const  UIImagePickerControllerMediaURL ;媒体的URL[/*] [*]NSString *const  UIImagePickerControllerReferenceURL ;原件的URL[/*] [*]NSString *const  UIImagePickerControllerMediaMetadata;当来数据来源是照相机的时候这个值才有效[/*] [/list] [b]获取最近的一张图片[/b] 最近的需求需要我模仿微信聊天提示最新的一张图片这个功能。 先讲讲思路。 思路很简单,点击“+”号的时候获取相册列表,获取最新保存的一张图片。根据图片保存时间,与当前时间戳进行计算,获得间隔时间。从而判断是否是需求的时间间隔。(时间间隔自定义) 计算公式:当前时间 - 图片保存时间 <= 时间间隔 那么根据这个思路就开始写一个分类。 它是关于ALAssetsLibrary的获取功能,那么就根据他写一个分类。 但是在iOS9后这个库过时了,不过还是将他封装一份,到时候新建一个工具类进行适配就行了。
[u]复制代码[/u] 代码如下:
//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简单实用封装。具体详细性能请看参考提供的链接。
[u]复制代码[/u] 代码如下:
//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)里面获取到。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部