关于ALAssetsLibrary的简单使用有两个方面:

第一:存储图片/视频方法如下:

// With a UIImage, the API user can use -[UIImage CGImage] to get a CGImageRef, and cast -[UIImage imageOrientation] to ALAssetOrientation.
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef orientation:(ALAssetOrientation)orientation completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
// The API user will have to specify the orientation key in the metadata dictionary to preserve the orientation of the image
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock // If there is a conflict between the metadata in the image data and the metadata dictionary, the image data metadata values will be overwritten
- (void)writeImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock
//
- (void)writeVideoAtPathToSavedPhotosAlbum:(NSURL *)videoPathURL completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock

简单说明:

orientation为储存图片时的具体操作:

typedef NS_ENUM(NSInteger, ALAssetOrientation) {
    ALAssetOrientationUp                 // default orientation 默认方向
    ALAssetOrientationDown             // 180 deg rotation
    ALAssetOrientationLeft              // 90 deg CCW
    ALAssetOrientationRight               // 90 deg CW
    ALAssetOrientationUpMirrored          // as above but image mirrored along other axis. horizontal flip 镜像
    ALAssetOrientationDownMirrored      // horizontal flip
    ALAssetOrientationLeftMirrored        // vertical flip
    ALAssetOrientationRightMirrored      // vertical flip
}

metadata为元数据内容,如果内容和图片内部冲突,将覆盖操作;

第二:获取图片/视频

以下方法中是异步获取相册内容:

// Get the list of groups that match the given types. Multiple types can be ORed together. The results are passed one by one to the caller by executing the enumeration block.
// When the enumeration is done, 'enumerationBlock' will be called with group set to nil.
// When groups are enumerated, the user may be asked to confirm the application's access to the data. If the user denies access to the application or if no application is allowed to access the data, the failure block will be called.
// If the data is currently unavailable, the failure block will be called.
- (void)enumerateGroupsWithTypes:(ALAssetsGroupType)types usingBlock:(ALAssetsLibraryGroupsEnumerationResultsBlock)enumerationBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock

ALAssetsGroupType参数解析如下:

ALASSetsGroupType: 类型 ALAssetsGroupLibrary:从iTunes 来的相册内容。

ALAssetsGroupAlbum:设备自身产生或从iTunes同步来的照片,但是不包括照片流跟分享流 中的照片。(例如从各个软件中保存下来的图片)

ALAssetsGroupEvent 相机接口事件产生的相册
ALAssetsGroupFaces
脸部相册(具体不清楚)
ALAssetsGroupSavedPhotos
相机胶卷照片
ALAssetsGroupPhotoStream
照片流
ALAssetsGroupAll
除了ALAssetsGroupLibrary上面所的内容。

获得组别后 对组别进行操作:

//组封面
- (CGImageRef)posterImage
//组别个数
- (NSInteger)numberOfAssets
//约束
- (void)setAssetsFilter:(ALAssetsFilter *)filter
//枚举
- (void)enumerateAssetsUsingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock
- (void)enumerateAssetsWithOptions:(NSEnumerationOptions)options usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock
- (void)enumerateAssetsAtIndexes:(NSIndexSet *)indexSet options:(NSEnumerationOptions)options usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock

参数说明:

ALAssetsFilter:

+ (ALAssetsFilter *)allPhotos;
+ (ALAssetsFilter *)allVideos;
+ (ALAssetsFilter *)allAssets;

NSEnumerationOptions:正反排序

NSIndexSet:组中第N个

对于ALAsset的说明:

方法:

  - (CGImageRef)thumbnail

  - (CGImageRef)aspectRatioThumbnail

  - (ALAssetRepresentation *)defaultRepresentation

  Representation属性:

  – CGImageWithOptions:

  – fullResolutionImage(完全分辨率的图片)

  – fullScreenImage(满屏的图片

  - (id)valueForProperty:(NSString *)property

property:

    1.ALAssetPropertyType 资源的类型(照片,视频)

      2.ALAssetPropertyLocation 资源地理位置(无位置信息返回null)

      3.ALAssetPropertyDuation 播放时长(照片返回ALErorInvalidProperty)

4.ALAssetPropertyOrientation 方向(共有8个方向,参见:ALAssetOrientation)

5.ALAssetPropertyDate 拍摄时间(包含了年与日时分秒)

6.ALAssetPropertyRepresentations 描述(打印看了下,只有带后缀的名称)

7.ALAssetPropertyURLs(返回一个字典,键值分别是文件名和文件的url)

8.ALAssetPropertyAssetURL 文件的url )

editable  property(指示资源是否可以编辑,只读属性)

originalAsset  property(原始资源。若没有保存修改后资源,则原始资源为nil)

我的代码:

-(void)getAllPicturesAndVideo
{
//失败控制
ALAssetsLibraryAccessFailureBlock failureblock =
^(NSError *myerror)
{
NSLog(@"相册访问失败 =%@", [myerror localizedDescription]);
if ([myerror.localizedDescription rangeOfString:@"Global denied access"].location!=NSNotFound) {
NSLog(@"无法访问相册.请在'设置->定位服务'设置为打开状态.");
}else{
NSLog(@"相册访问失败.");
}
return ;
};
mutableArray =[[NSMutableArray alloc]init];
  //成功
ALAssetsLibraryGroupsEnumerationResultsBlock libraryGroupsEnumeration =
  ^(ALAssetsGroup* group,BOOL* stop){
   //说明枚举结束用group==nil标识
if (group!=nil)
{
[mutableArray addObject:group];
}
else
{
NSLog(@"%ld",mutableArray.count);
        
//更新UI
}
};
[[ViewController defaultAssetsLibrary] enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:libraryGroupsEnumeration
failureBlock:failureblock]; }
//从组别中获取第index个数据
[group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:index] options:NSEnumerationConcurrent usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
//图片
if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) { UIImage *image=[UIImage imageWithCGImage:[result aspectRatioThumbnail]];
      
  }
     //视频
     else if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]){
//UIImage *image=[UIImage imageWithCGImage:[result aspectRatioThumbnail]];
       [[WHViewController defaultAssetsLibrary] assetForURL:[result valueForProperty:ALAssetPropertyAssetURL] resultBlock:^(ALAsset *asset) {
                //写入沙盒
                [self handleWrittenFile:asset];
            } failureBlock:^(NSError *error) {
                //
            }];
}
}];
//文件写入方法
-(void)handleWrittenFile:(ALAsset*) videoAsset
{
NSString *DocRoot = [(NSArray*)NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:];
NSString *tempFile = [NSString stringWithFormat:@"%@/VideoFileName.mov",DocRoot];
ALAssetRepresentation *rep = [videoAsset defaultRepresentation];
NSUInteger size = [rep size];
const int bufferSize = ;
NSLog(@"written to : %@", tempFile);
FILE *f = fopen([tempFile cStringUsingEncoding:], "wb+");
if (f==NULL) {
return;
}
Byte *buffer =(Byte*)malloc(bufferSize);
NSInteger read =, offset = ;
NSError *error;
if (size != ) {
do {
read = [rep getBytes:buffer
fromOffset:offset
length:bufferSize
error:&error];
fwrite(buffer, sizeof(char), read, f);
offset += read;
NSLog(@"read : %ld total : %ld",read, offset);
} while (read != );
}
fclose(f);
free(buffer);
}

ios ALAssetsLibrary简单的使用的更多相关文章

  1. iOS上简单推送通知(Push Notification)的实现

    iOS上简单推送通知(Push Notification)的实现 根据这篇很好的教程(http://www.raywenderlich.com/3443/apple-push-notification ...

  2. iOS CAReplicatorLayer 简单动画

    代码地址如下:http://www.demodashi.com/demo/11601.html 写在最前面,最近在看学习的时候,偶然间发现一个没有用过的Layer,于是抽空研究了下,本来应该能提前记录 ...

  3. iOS之简单瀑布流的实现

    iOS之简单瀑布流的实现   前言 超简单的瀑布流实现,这里说一下笔者的思路,详细代码在这里. 实现思路 collectionView能实现各中吊炸天的布局,其精髓就在于UICollectionVie ...

  4. iOS,手势识别简单使用

    1.iOS目前支持的手势识别(6种) 2.点按手势和慢速拖动手势简单使用 iOS目前支持的手势识别(6种) UITapGestureRecognizer(点按) UIPinchGestureRecog ...

  5. iOS NSData简单解析

    iOS 基本数据类型之NSData 1 nsdata 作用: 用于存储二进制的数据类型 nadat类提供一种简单的方式,它用来设置缓存区.将文件的内容读入到缓存区.或者将缓存区中的内容写到一个文件. ...

  6. iOS 多线程 简单学习NSThread NSOperation GCD

    1:首先简单介绍什么叫线程 可并发执行的,拥有最小系统资源,共享进程资源的基本调度单位. 共用堆,自有栈(官方资料说明iOS主线程栈大小为1M,其它线程为512K). 并发执行进度不可控,对非原子操作 ...

  7. iOS开发-简单工厂模式

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.概念很长,iOS开发中最常 ...

  8. ios label 简单的长按复制文本信息

    在iOS开发过程中,有时候会用到UILabel展示的内容,那么就设计到点击UILabel复制它上面展示的内容的功能,也就是Label长按复制功能.网上有很多种给Label添加长按复制功能的方法,这里我 ...

  9. iOS 多线程简单使用的具体解释

    主线程 一个iOS程序执行后.默认会开启1条线程,称为"主线程"或"UI线程"(刷新UI界面最好在主线程中做.在子线程中可能会出现莫名其妙的BUG) 主线程的作 ...

随机推荐

  1. Cloudera Manager安装_搭建CDH集群

    2017年2月22日, 星期三 Cloudera Manager安装_搭建CDH集群 cpu   内存16G 内存12G 内存8G 默认单核单线 CDH1_node9 Server  || Agent ...

  2. MySQL优化二(连接优化和缓存优化)

    body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...

  3. 在.NET Core 上运行的 WordPress

    在.NET Core 上运行的 WordPress,无需安装PHP既可跨平台运行WordPress. 在Peachpie中实现PHP所需的功能数月后,现在终于可以运行一个真实的应用程序:WordPre ...

  4. sql 语句优化

    sql语句性能达不到你的要求,执行效率让你忍无可忍,一般会时下面几种情况. 网速不给力,不稳定. 服务器内存不够,或者SQL 被分配的内存不够. sql语句设计不合理 没有相应的索引,索引不合理 没有 ...

  5. 南京.NET技术行业落地分享交流会圆满成功

    3月11日,由南京.NET社区发起,纳龙科技赞助,并联合举办的,.NET技术线下交流活动,圆满成功. 这是南京.NET圈子第一次的小型聚会,为了办好此次活动,工作人员不敢怠慢.早早准备好了小奖品与水果 ...

  6. mtime,ctime,atime

    mtime,ctime,atime是linux三个主要的变动时间. 这三个时间比较容易理解,但是不容易记忆,也容易搞混. mtime (modification time)  文件内容数据更改时,会更 ...

  7. 3301: [USACO2011 Feb] Cow Line

    3301: [USACO2011 Feb] Cow Line Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 82  Solved: 49[Submit ...

  8. 3297: [USACO2011 Open]forgot

    3297: [USACO2011 Open]forgot Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 69  Solved: 51[Submit][ ...

  9. virtualBox,webstorm,开虚拟机传代码

    一起git一个新技能 利用virtualBOX在本地开一个虚拟机,然后设置webstorm连接到虚拟机,将代码传到虚拟机里. 以下详细讲解: 第一步: 第二步:管理虚拟机的设置(我是用的是Xshell ...

  10. SEO-搜索引擎高级搜索指令

    搜索引擎高级搜索指令 1.双引号 把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配.bd和Google 都支持这个指令.例如搜索: & ...