ios 相册操作 ALAssetsLibrary

1.ALAssetsLibrary 实例为我们提供了获取相册(照片app)中的图片和视频的功能。在ios8 photos framework代替了ALAssetsLibrary。

在使用ALAssetsLibrary时,我们需要申明它的实例。

ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];

2. 迭代获取相册ALAssetsGroup:

- (void)enumerateGroupsWithTypes:(ALAssetsGroupType)types
                      usingBlock:(ALAssetsLibraryGroupsEnumerationResultsBlock)enumerationBlock
                    failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock

ALASSetsGroupType: 类型

  • ALAssetsGroupLibrary:从iTunes 来的相册内容(如本身自带的向日葵照片)。
  • ALAssetsGroupAlbum:设备自身产生或从iTunes同步来的照片,但是不包括照片流跟分享流中的照片。(例如从各个软件中保存下来的图片)
  • ALAssetsGroupEvent
    相机接口事件产生的相册
  • ALAssetsGroupFaces
    脸部相册(具体不清楚)
  • ALAssetsGroupSavedPhotos
    相机胶卷照片
  • ALAssetsGroupPhotoStream
    照片流
  • ALAssetsGroupAll
      除了ALAssetsGroupLibrary上面所的内容。

ALAssetsLibraryGroupsEnumerationResultsBlock

    ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {
    ALAssetsFilter *onlyPhotosFilter = [ALAssetsFilter allPhotos];
        [group setAssetsFilter:onlyPhotosFilter];
        if ([group numberOfAssets] > 0)
        {
            [self.imageGroup addObject:group];
        }
        else
        {
            [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
        }
    };

上面就是迭代AlAssetsGroup的block。每迭代一次就把相应的AlAssetsGroup保存在一个可变的数组之中。AlAssetsGroup中的一些属性表明了这个相册的特征。比如:

posterImage
  相册的缩略图

numberOfAssets  相册中照片的数量

valueForProperty
通过NSString获取一些属性,有以下的属性
NSString*constALAssetsGroupPropertyName;NSString*constALAssetsGroupPropertyType;NSString*constALAssetsGroupPropertyPersistentID;
(唯一标识ID)
NSString*constALAssetsGroupPropertyURL;(唯一标识URL

#import "AssetsViewController.h"
#import  <AssetsLibrary/AssetsLibrary.h>
@interface AssetsViewController ()<UITableViewDataSource,UITableViewDelegate>

@property  (nonatomic, strong)  ALAssetsLibrary *assetsLibrary;
@property  (nonatomic, strong)  UITableView *tableView;
@property  (nonatomic, strong)  NSMutableArray *imageGroup;
@end

@implementation AssetsViewController

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

- (NSMutableArray *)imageGroup
{
    if (!_imageGroup) {
        _imageGroup = [[NSMutableArray alloc] initWithCapacity:0];
    }
    return _imageGroup;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [self.imageGroup removeAllObjects];

    UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
    [self.view addSubview:tableView];
    tableView.delegate = self;
    tableView.dataSource = self;

    ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group, BOOL *stop) {
    ALAssetsFilter *onlyPhotosFilter = [ALAssetsFilter allPhotos];
        [group setAssetsFilter:onlyPhotosFilter];
        if ([group numberOfAssets] > 0)
        {
            [self.imageGroup addObject:group];
        }
        else
        {
            [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
        }
    };

    NSUInteger groupTypes = ALAssetsGroupAll ;

    [self.assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:listGroupBlock failureBlock:^(NSError *error) {
        NSLog(@"Group not found!\n");
    }];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.imageGroup.count;
}

-  (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellName = @"name";
    UITableViewCell *cell =  [tableView dequeueReusableCellWithIdentifier:cellName];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellName];
    }

    ALAssetsGroup *group = [self.imageGroup objectAtIndex:indexPath.row];
    UIImage *postImage = [UIImage imageWithCGImage:[group posterImage]];

    cell.imageView.image =  postImage;
    cell.textLabel.text = [group valueForProperty:ALAssetsGroupPropertyName];;
    cell.detailTextLabel.text = [@(group.numberOfAssets) stringValue];
    return cell;
}
时间: 2024-10-10 01:06:46

ios 相册操作 ALAssetsLibrary的相关文章

iOS频繁打开相册崩溃: ALAssetsLibrary error - “Too many contexts. No space in contextList.”

iOS频繁打开相册崩溃: ALAssetsLibrary error - “Too many contexts. No space in contextList.” http://stackoverflow.com/questions/13480611/has-anyone-experienced-crashes-when-using-alassetslibrary-in-a-background-thread 原因: 因为频繁的调用 [[ALAssetsLibrary alloc] init]

ios相机和相册操作

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{    UIImagePickerController * picker = [[UIImagePickerController alloc] init];    picker.delegate = self;        switch (buttonIndex) {        case 0:// 相机   

iOS 数据库操作(使用FMDB)

iOS 数据库操作(使用FMDB) iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepersistentobjects等,FMDB (https://github.com/ccgus/fmdb) 是一款简洁.易用的封装库,这一篇文章简单介绍下FMDB的使用. 在FMDB下载文件后,工程中必须导入如下文件,并使用 libsqlite3.dylib 依赖包.

iOS——文件操作NSFileManager (创建、删除,复制,粘贴)

iOS——文件操作NSFileManager (创建.删除,复制,粘贴) iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录.               上面的完整路径为:用户->资源库->Applicat

iOS数据库操作之coredata详细操作步骤

CHENYILONG Blog iOS数据库操作之coredata详细操作步骤 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong iOS应用数据存取的常用方式 ? XML属性列表 -- PList? NSKeyedArchiver 归档 ?Preference(偏好设置) ? SQLite3? Core DataCore Data简介 ? Core Data 是iOS SDK 里的一个很强大的

iOS文件操作一览

1.常见的NSFileManager文件方法 2.常见的NSFileManager目录方法 3.常用的路径工具方法 4.常用的路径工具函数 5.NSProcessInfo类方法 6.常用的NSFileHandle方法 [附]iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立.封闭.安全的空间,叫做沙盒.它一般存放着程序包文件(可执行文件).图片.音频.视频.plist文件.sqlite数据库以及其他文件. 每个应用程序都有自己的独立的存储空间(沙盒) 一般来说应用程序之

iOS特殊操作--持续更新

1. ios8,9开始支持icloud,影响相册相关操作: 3. 应用切到后台后,新消息提醒 是否在应用图标右上角作数字标记,有开关控制:   设置->通知->应用名称->"应用程序图标标记"选中此项,表示有数字标记,不选则没有: 4. 如何在数据网络下查看手机IP setp1.打开手机数据网络 setp2.打开手机浏览器--百度,在百度搜索框中 输入"IP地址" setp3. 查看搜索结果: 5. 连续输入两个空格,会成为一个句号 如果是中文输入

iOS手势操作,拖动,轻击,捏合,旋转,长按,自定义(http://www.cnblogs.com/huangjianwu/p/4675648.html)

1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作. UIPanGestureRecognizer(拖动) UIPinchGestureRecognizer(捏合) UIRotationGestureRecognizer(旋转) UITapGestureRecognizer(点按) UILo

IOS文件操作和自定义对象的归档(序列化)、反归档(反序列化)

IOS对文件操作包含文件的创建,读写,移动,删除等操作. 1.文件的创建: //设定文本框存储文件的位置 NSString *strFilePath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]; //指定存储文件的文件名 NSString *fileName=[strFilePath stringByAppendingPathComponent:@