一:

ALAssetsGroupEnumerationResultsBlock resultsBlock = ^(ALAsset *result, NSUInteger index, BOOL *stop) {

if (result && [[result valueForProperty:ALAssetPropertyType] isEqual:ALAssetTypePhoto]) {

ZWPhoto *aPhoto = [[ZWPhoto alloc] initWithAsset:result];

aPhoto.checked = false;

aPhoto.originPhotoNeeded = false;

[self.photosArray addObject:aPhoto];

} else if (self.photosArray.count > 0) {

[self.collectionView reloadData];

}

};

[self.assetsGroup enumerateAssetsUsingBlock:resultsBlock];

二:

self.assetsLibrary = [[ALAssetsLibrary alloc] init];

dispatch_queue_t dispatchQueue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(dispatchQueue, ^(void) {

// 遍历所有相册

[self.assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll

usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

// 遍历每个相册中的项ALAsset

[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index,BOOL *stop) {

__block BOOL foundThePhoto = NO;

if (foundThePhoto){

*stop = YES;

}

// ALAsset的类型

NSString *assetType = [result valueForProperty:ALAssetPropertyType];

if ([assetType isEqualToString:ALAssetTypePhoto]){

foundThePhoto = YES;

*stop = YES;

ALAssetRepresentation *assetRepresentation =[result defaultRepresentation];

CGFloat imageScale = [assetRepresentation scale];

UIImageOrientation imageOrientation = (UIImageOrientation)[assetRepresentation orientation];

dispatch_async(dispatch_get_main_queue(), ^(void) {

CGImageRef imageReference = [assetRepresentation fullResolutionImage];

// 对找到的图片进行操作

UIImage *image =[[UIImage alloc] initWithCGImage:imageReference scale:imageScale orientation:imageOrientation];

_myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];

_myImageView.image = image;

[self.view addSubview:_myImageView];

if (image != nil){

//获取到第一张图片

} else {

NSLog(@"Failed to create the image.");

} });

}

}];

}

failureBlock:^(NSError *error) {

NSLog(@"Failed to enumerate the asset groups.");

}];

});

ALAssets的两种用法的更多相关文章

  1. c++ operator操作符的两种用法:重载和隐式类型转换,string转其他基本数据类型的简洁实现string_cast

    C++中的operator主要有两个作用,一是操作符的重载,一是自定义对象类型的隐式转换.对于操作符的重载,许多人都不陌生,但是估计不少人都不太熟悉operator的第二种用法,即自定义对象类型的隐式 ...

  2. operator 的两种用法

    C++,有时它的确是个耐玩的东东,就比如operator,它有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换).1.操作符 ...

  3. Service的两种用法及其生命周期

    先来一点基础知识: Service 是android的四大组件之一,与Activity同属于一个级别,它是运行在后台进行服务的组件(例如在后台播放的音乐,播放音乐的同时并不影响其他操作).Servic ...

  4. JSP中的include的两种用法

    1.两种用法 <%@ include file=” ”%> <jsp:include page=” ” flush=”true”/> 2.用法区别 (1)执行时间上区别 < ...

  5. 子查询。ANY三种用法。ALL两种用法。HAVING中使用子查询。SELECT中使用子查询。

    子查询存在的意义是解决多表查询带来的性能问题. 子查询返回单行多列: ANY三种用法: ALL两种用法: HAVING中的子查询返回单行单列: SELECT中使用子查询:(了解就好,避免使用这种方法! ...

  6. Comparable和Comparator的区别&Collections.sort的两种用法

    在Java集合的学习中,我们明白了: 看到tree,可以按顺序进行排列,就要想到两个接口.Comparable(集合中元素实现这个接口,元素自身具备可比性),Comparator(比较器,传入容器构造 ...

  7. in有两种用法:

    # in有两种用法: 1. 在for中. 是把每一个元素获取到赋值给前⾯的变量. 2. 不在for中. 判断xxx是否出现在str中. #len() 为内置函数,输出为1,2,3,4....., 长度 ...

  8. [VC]C++ operator 两种用法

    C++中的operator,有两种用法,一种是operator overloading(操作符重载),一种是operator casting(操作隐式转换).下面分别进行介绍:   1.operato ...

  9. jsp中include的两种用法

    JSP中的include的两种用法 1.两种用法 <%@ include file=” ”%> <jsp:include page=” ” flush=”true”/> 2.用 ...

随机推荐

  1. img src 使用 base64 图片数据

    img src 使用 base64 图片数据 在网页上显示一张图片通常是 <img src="xxx.png" > 或 <img src="www.ur ...

  2. Linux下安装最新的Eclipse

    欢迎关注我的社交账号: 博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html GitHub地址: https://github.com/ji ...

  3. Epplus使用教程1(基本介绍)

    1.前言 目前Epplus的介绍中文资料很少,我也一直在摸索中使用它,以下是我在使用过程中得到的经验,写出来供大家参考.本系列共4章: 导出Excel之Epplus使用教程1(基本介绍) 导出Exce ...

  4. Android EditText 获得输入焦点 以及requestfocus()失效的问题

    最近做公司项目的时候,经常会遇到一个问题,就是我为某个控件如EditText设置requestfocus()的时候不管用,比如说登陆的时候,我判断下用户输入的密码,如果正确就登陆,错误就提示密码错误, ...

  5. Javascript脚本应该放在哪里?

    1.<head> <srcipt>在被调用的时候才执行(页面加载前执行)</script> </head> 2. <srcipt>在被调用的 ...

  6. [svn] 分支开发

    参考博客: http://www.cnblogs.com/cxd4321/archive/2012/07/12/2588110.html (1)为什么要使用SVN分支开发和主干合并? 目的:在SVN下 ...

  7. 你不知道的JavaScript--值得你挑战的JavaScript面试题(45题)

    1,以下表达式的运行结果是: ["1","2","3"].map(parseInt) A.["1","2&qu ...

  8. C语言知识整理(3):内存管理(详细版)

    在计算机系统,特别是嵌入式系统中,内存资源是非常有限的.尤其对于移动端开发者来说,硬件资源的限制使得其在程序设计中首要考虑的问题就是如何有效地管理内存资源.本文是作者在学习C语言内存管理的过程中做的一 ...

  9. Cookie实例,理解cookie

    一.一句话了解cookie是什么 cookie是服务端发送给客户端的.用来记录一些信息(如用户名),定制主页,聚焦广告的.最终以文件形式存在于客户端电脑磁盘下的小型文档. 二.用实例来认清cookie ...

  10. Java DES 加解密文件

    import com.mchange.v2.io.DirectoryDescentUtils; import javax.crypto.Cipher;import javax.crypto.Ciphe ...