[原]iOS7.1获取图库所有照片的方法封装

今天一直在弄这个东西,各种度,网上有不少这样的例子和讲解,但是就是没有正常获取出来。。很郁闷!

后来终于各种尝试,为了让小伙伴们少折腾会,特写出此简单的类。

技术能力有限,多有不足,还请多多指教!

简单类快捷入口:

链接: http://pan.baidu.com/s/1hqvJLru 密码: 1jd0

//出处:http://www.cnblogs.com/madordie/
//
//  声明:写此类时候只为了获取图库中的图片。由于真机不在手边,只在模拟器上测试(iOS7.1)
//       如需要获得其他视频之类的可以自行更改fillAssetGroups函数
//

//
//  本地照片管理
//  (单例模式)
//  用法:
//JGPhotoAlbumManager *manager = [JGPhotoAlbumManager shared];
//[manager setSaveAllPhotos:^(NSArray *images) {
//    if (!_tableData) {
//        _tableData = [[NSMutableArray alloc] init];
//    }
//    [_tableData removeAllObjects];
//    [_tableData addObjectsFromArray:images];
//    [_tableView reloadData];
//}];
//
//  cell 填充:
//ALAsset *asset = _tableData[indexPath.row];
//[cell.imageView setImage:[asset fastGetThumbnailImage]];
//注:
//fastGetThumbnailImage为自定义类别,见#import "ALAsset+JGFastGetPhoto.h"
//

关键代码:

    //如果需要获取别的更改下面的addObject位置
#pragma mark - 填充 _assetGroups
- (void)fillAssetGroups {
    ALAssetsLibrary *assetsLibrary = [JGPhotoAlbumManager sharedAssetsLibrary];//生成整个photolibrary句柄的实例
    [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {//获取所有group
        if (group) {
            [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {//从group里面
                NSString* assetType = [result valueForProperty:ALAssetPropertyType];
                if ([assetType isEqualToString:ALAssetTypePhoto]) {
                    NSLog(@"Photo");
                    [_assetGroups addObject:result];
                }else if([assetType isEqualToString:ALAssetTypeVideo]){
                    NSLog(@"Video");
                }else if([assetType isEqualToString:ALAssetTypeUnknown]){
                    NSLog(@"Unknow AssetType");
                }

                NSDictionary *assetUrls = [result valueForProperty:ALAssetPropertyURLs];
                NSUInteger assetCounter = 0;
                for (NSString *assetURLKey in assetUrls) {
                    NSLog(@"Asset URL %lu = %@",(unsigned long)assetCounter,[assetUrls objectForKey:assetURLKey]);
                }

                NSLog(@"Representation Size = %lld",[[result defaultRepresentation]size]);
            }];
        } else {
            //stop
            dispatch_async(dispatch_get_main_queue(), ^(void) {
                _saveAllPhotos(_assetGroups);
            });
        }

    } failureBlock:^(NSError *error) {
        NSLog(@"Enumerate the asset groups failed.");
    }];
}

获取所有

@interface ALAsset (JGFastGetPhoto)
//图片URL
- (NSString *)fastGetURLString;
- (NSURL *)fastGetURL;
//缩略图
- (UIImage *)fastGetThumbnailImage;
//全屏图
- (UIImage *)fastGetFullScreenImage;
//高清图
- (UIImage *)fastGetFullResolutionImage;
//获取时间
- (NSString *)fastGetDataString;

//缩略图
- (UIImage *)fastGetThumbnailImage {
    CGImageRef  ref = [self thumbnail];
    return [UIImage imageWithCGImage:ref];
}

转换

时间: 2024-10-27 18:49:37

[原]iOS7.1获取图库所有照片的方法封装的相关文章

iOS7: 如何获取不变的UDID

如何使用KeyChain保存和获取UDID 本文是iOS7系列文章第一篇文章,主要介绍使用KeyChain保存和获取APP数据,解决iOS7上获取不变UDID的问题.并给出一个获取UDID的工具类,使用方便,只需要替换两个地方即可. 一.iOS不用版本获取UDID的方法比较 1)iOS 5.0 iOS 2.0版本以后UIDevice提供一个获取设备唯一标识符的方法uniqueIdentifier,通过该方法我们可以获取设备的序列号,这个也是目前为止唯一可以确认唯一的标示符.好景不长,因为该唯一标

017_03获取图库图片

当需要在之前Activity中得到新打开Activity的数据,需要系统提供的startActivityForResult(Intent intent,int requestCode)方法.为了取得传回的数据,需要在之前的Activity中重写onActivityResult(int requestCode, int resultCode,Intent data)方法. 1 package com.example.day17_03getExif; 2 3 import android.app.A

[转] iOS7如何获取设备唯一标识

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); WWDC 2013已经闭幕,I

在Windows及Linux下获取毫秒级运行时间的方法

在Windows下获取毫秒级运行时间的方法 头文件:<Windows.h> 函数原型: /*获取时钟频率,保存在结构LARGE_INTEGER中***/ WINBASEAPI BOOL WINAPI QueryPerformanceFrequency( _Out_ LARGE_INTEGER * lpFrequency ); /*获取从某个时间点开始的时钟周期数,保存在结构LARGE_INTEGER中**/ WINBASEAPI BOOL WINAPI QueryPerformanceFreq

JavaScript设置获取和设置属性的方法

这篇文章主要介绍了JavaScript设置获取和设置属性的方法,学会使用getAttribute.setAttribute的用法,需要的朋友可以参考下 getAttribute 该方法用来获取元素的属性,调用方式如下所示: 复制代码代码如下: object.getAttribute(attribute) 以此前介绍的一些方法不同,getAttribute方法不属于document对象,所以不能通过document对象调用.它只能通过元素节点对象来调用. 该方法只接受一个参数,你指定要查询的属性的

利用反射机制,获取类的字段、方法、并实现简单调用

这篇文章是为之后要介绍Android的ICO框架做预备的,所以,如果想最近学习Android的ICO框架的同学,可以稍微看一下. 首先,简单介绍一下Java里面的反射. JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 不知道这样的一段解释,你能否看懂.如果更简单的说,反射就是能够根据你给出类名实例化出一个实实在在的对象.所以,对象的实例

hibernate实现分表后获取insert自增ID方法。

#第一种基于原生的JDBC的方式实现 private Integer insert(POJO entity, String table) throws SQLException { String insertSQL = "INSERT INTO " + table + " (XXXX)VALUES(?,?,?,?,?,?,?,?)"; DataSource dataSource = SessionFactoryUtils.getDataSource(getHiber

使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法

Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法 获取Class类实例的方法: 类名.class 实例名.getClass() Class.forName(className) public class RefTest { @Test public void testRef(){ //Class cls = RefTest.class; //Class.forName("com.jboa.service.RefTest"); //new RefTest()

Android开发之通过反射获取到Android隐藏的方法

在PackageManger中,有些方法被隐藏了,无法直接调用,需要使用反射来获取到该方法. 比如方法:getPackageSizeInfo(),通过这个方法可以获取到apk的CacheSize,CodeSize,DataSize等信息,但是该方法是隐藏的,@hide. 遇到这种情况,需要使用反射: 1 try { 2 //通过反射,获取到PackageManager隐藏的方法getPackageSizeInfo() 3 Method getPackageSizeInfo = PackageMa