AssetsLibrary/AssetsLibrary.h 相册获取

ios8.0以前获取相册有UIImagePicker(但是每次只能选取一张),如果需要选取多张,只能自己来自定义picker

这里用到的框架为AssetsLibrary.framework,资源库,

#import <AssetsLibrary/ALAsset.h> //图片的基本信息

#import <AssetsLibrary/ALAssetsFilter.h> //Group的过滤器,记住,只能生效一个

#import <AssetsLibrary/ALAssetsGroup.h>//获取相册

#import <AssetsLibrary/ALAssetsLibrary.h>//额 整个类库的管理类吧

#import <AssetsLibrary/ALAssetRepresentation.h> //图片的详细信息

 

我这边简单的封装了一下,大致的流程就是先获取相册,然后再获取相册中的照片,比较简单,直接上代码吧

- (NSMutableDictionary *)detailGroups {
    
    if (!_detailGroups) {
        _detailGroups = @{}.mutableCopy;
    }
    
    return _detailGroups;
}

- (ALAssetsLibrary *)library {
    if (!_library) {
        _library = [[ALAssetsLibrary alloc]init];
    }
    return _library;
}

- (NSMutableArray *)assesGroups {
    
    if (!_assesGroups) {
        _assesGroups = @[].mutableCopy;
    }
    
    return _assesGroups;
}

+ (LIUAsset *)shareAsset {
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _shareAsset = [[LIUAsset alloc]init];
    });
    
    return _shareAsset;
}

- (void)releaseObj {
    if (_shareAsset) {
        _shareAsset = nil;
    }
}


///获取所有的分组
- (void)getAssetsGroups:(GetAssetsGroupsBlock)assetsGroup {
    
    if (self.assesGroups.count != 0) {
        if (assetsGroup) {
            assetsGroup(self.assesGroups.copy);
            return;
        };
    }
    
    [self.library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        
        //只需要photo
        ALAssetsFilter *onlyPhotos = [ALAssetsFilter allPhotos];
        if (group) {
            
            [group setAssetsFilter:onlyPhotos];
            if ([group numberOfAssets] > 0) {
                [self.assesGroups addObject:group];
            }
            
        }else {
            //这里本来应该是要按照*stop来判断的,貌似调试的时候发现这个stop一直是no,但是有一个参考的是这里的group当是最后一个的时候 会是nil,就根据这个判断吧
            if (assetsGroup) {
                assetsGroup(self.assesGroups.copy);
                return;
            }
        }
        
    } failureBlock:^(NSError *error) {
        
    }];
    
}

///获取分组所有的alasset
- (void)getAllAssetsByGroup:(ALAssetsGroup *)group Finish:(GetAssetsBlock)finish{
    
    NSString *groupName = [group valueForProperty:ALAssetsGroupPropertyName];
    __block NSMutableArray *allAssets = [self.detailGroups objectForKey:groupName];
    
    if (allAssets) {
        //返回数据了
        if (finish) {
            finish(allAssets.copy);
        }
        return;
    }
    //如果没有数据
    allAssets = @[].mutableCopy;
    
    [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {

        //不知道为什么这里的stop显示不对呀
        if (result) {
            [allAssets addObject:result];
        }else {
            //先把数组保存到字典中
            [self.detailGroups setObject:allAssets forKey:groupName];
            if (finish) {
                finish(allAssets.copy);
            }
            return;
        }
        
    }];

}

///获取全屏图
- (UIImage *)getFullImageWitAsset:(ALAsset *)asset {
    return [UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]];
}

///获取缩略图
- (UIImage *)getThumbImageWithAsset:(ALAsset *)asset {
    return [UIImage imageWithCGImage:[asset thumbnail]];
}

ios 8以后,苹果就舍弃了这个类库,新建了一个photos类,下次有空再整理一下这个类库的 

posted on 2015-11-12 16:19  飞羽的幸福  阅读(423)  评论(0编辑  收藏  举报

导航