用一个tableView区分照片和video
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic,strong)UITableView *tableView;
@property(nonatomic,strong)NSMutableArray *assets;// 照片数组
@property(nonatomic,strong)NSMutableArray *videoArr;// 视频数组
@property(nonatomic,strong)ALAssetsLibrary *library;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
NSLog(@"%ld", [ALAssetsLibrary authorizationStatus]);
self.assets = [[NSMutableArray alloc]initWithCapacity:0];
self.videoArr = [[NSMutableArray alloc]initWithCapacity:0];
self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 50, 320, 416) style:UITableViewStyleGrouped];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.view addSubview:self.tableView];
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, self.tableView.frame.size.height+70, 320, 80)];
view.backgroundColor = [UIColor yellowColor];
UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn1.frame = CGRectMake(10, 10, 100, 50);
[btn1 setTitle:@"测试添加相册" forState:UIControlStateNormal];
[btn1 addTarget:self action:@selector(addGroud) forControlEvents:UIControlEventTouchUpInside];
[view addSubview:btn1];
[self.view addSubview:view];
self.library = [[ALAssetsLibrary alloc] init];
void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
if(result != NULL) {
if ([result valueForProperty:ALAssetPropertyType] == ALAssetTypeVideo) {
[self.videoArr addObject:result];
}else if([result valueForProperty:ALAssetPropertyType] == ALAssetTypePhoto){
[self.assets addObject:result];
}
}
};
//便利相册
void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) {
if(group != nil) {
[group enumerateAssetsUsingBlock:assetEnumerator];
}
[self.tableView reloadData];
};
// //便利所有相册
[self.library enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:assetGroupEnumerator
failureBlock: ^(NSError *error) {
NSLog(@"便利所有相册");
}];
[self.tableView reloadData];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) {
if ([self.assets count]>5) {
return 5;
}else{
return [self.assets count];
}
}else{
if ([self.videoArr count]>5) {
return 5;
}else{
return [self.videoArr count];
}
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if (indexPath.section == 0) {
ALAsset *asset = [self.assets objectAtIndex:indexPath.row];
struct CGImage *imagecg = asset.thumbnail;
UIImage *image = [UIImage imageWithCGImage:imagecg];
[cell.imageView setImage:image];
[cell.textLabel setText:[NSString stringWithFormat:@"Photo %d", indexPath.row+1]];
}else if (indexPath.section == 1){
ALAsset *asset = [self.videoArr objectAtIndex:indexPath.row];
struct CGImage *imagecg = asset.thumbnail;
UIImage *image = [UIImage imageWithCGImage:imagecg];
[cell.imageView setImage:image];
[cell.textLabel setText:[NSString stringWithFormat:@"video %d", indexPath.row+1]];
}
return cell;
}
添加一个图片到默认相册
//添加图片到相册
NSString *path = [[NSBundle mainBundle] pathForResource:@"123" ofType:@"png"];
NSURL *urll = [NSURL fileURLWithPath:path];
NSData *data = [NSData dataWithContentsOfURL:urll];
[_library writeImageDataToSavedPhotosAlbum:data metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
}];
//保存图片到系统默认的相册中,使用nsdata的形式,并返回照片的url地址
[_library writeImageDataToSavedPhotosAlbum:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
}];
创建一个相册
- (void)addGroud{
[self.library addAssetsGroupAlbumWithName:@"测试添加相册" resultBlock:^(ALAssetsGroup *group) {
NSLog(@"addAssetsGroupAlbumWithName");
// //查看相册的名字
NSLog(@"ALAssetsGroupPropertyName:%@",[group valueForProperty:ALAssetsGroupPropertyName]);
// //查看相册的类型
NSLog(@"ALAssetsGroupPropertyType:%@",[group valueForProperty:ALAssetsGroupPropertyType]);
// //查看相册的存储id
NSLog(@"ALAssetsGroupPropertyPersistentID:%@",[group valueForProperty:ALAssetsGroupPropertyPersistentID]);
// //查看相册存储的位置地址
NSLog(@"ALAssetsGroupPropertyURL:%@",[group valueForProperty:ALAssetsGroupPropertyURL]);
NSURL *groupURL = [group valueForProperty:ALAssetsGroupPropertyURL];
} failureBlock:^(NSError *error) {
NSLog(@"ERR : %@",error);
}];
}
保存video到相册
//保存video到相册
- (void)saveVideo:(NSString *)videoPath toAlbum:(NSString *)albumName withCompletionBlock:(SaveImageCompletion)completionBlock
{
[self writeVideoAtPathToSavedPhotosAlbum:[NSURL fileURLWithPath:videoPath]
completionBlock:^(NSURL *assetURL, NSError *error) {
if (error!=nil) {
completionBlock(error);
return;
}
//add the asset to the custom photo album
[self addAssetURL: assetURL
toAlbum:albumName
withCompletionBlock:completionBlock];
}];
}
-(void)addAssetURL:(NSURL*)assetURL toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock
{
__block BOOL albumWasFound = NO;
//search all photo albums in the library
//遍历相册
[self enumerateGroupsWithTypes:ALAssetsGroupAlbum
usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
//compare the names of the albums
if ([albumName compare: [group valueForProperty:ALAssetsGroupPropertyName]]==NSOrderedSame) {
//target album is found
albumWasFound = YES;
//get a hold of the photo's asset instance
//通过url得到asset
[self assetForURL: assetURL
resultBlock:^(ALAsset *asset) {
//add photo to the target album
[group addAsset: asset];
//run the completion block
completionBlock(nil);
} failureBlock: completionBlock];
//album was found, bail out of the method
return;
}
//如果没有 创建相册加入asset
if (group==nil && albumWasFound==NO) {
//photo albums are over, target album does not exist, thus create it
ALAssetsLibrary* weakSelf = self;
//create new assets album
[self addAssetsGroupAlbumWithName:albumName
resultBlock:^(ALAssetsGroup *group) {
//get the photo's instance
[weakSelf assetForURL: assetURL
resultBlock:^(ALAsset *asset) {
//add photo to the newly created album
[group addAsset: asset];
//call the completion block
completionBlock(nil);
} failureBlock: completionBlock];
} failureBlock: completionBlock];
//should be the last iteration anyway, but just in case
return;
}
} failureBlock: completionBlock];
}
保存png到指定相册
//保存图片到系统默认的相册中,使用cgimageref的形式,并且选择图片以什么旋转方向的形式保存,并返回照片的url地址
/*
typedef enum {
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
} ALAssetOrientation;
*/
UIImage* image = [UIImage imageNamed:@"123"];
[_library writeImageToSavedPhotosAlbum:[image CGImage] orientation:ALAssetOrientationLeft completionBlock:^(NSURL *assetURL, NSError *error) {
NSLog(@"save image:%@",assetURL);
//通过ALAssetsLibrary迭代取出所有相册
[_library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
NSString* groupname = [group valueForProperty:ALAssetsGroupPropertyName];
//如果相册的名称是test的时候,对其进行操作
if ([groupname isEqualToString:@"测试添加相册"]) {
//设置相册组的筛选条件,ALAssetsFilter类表示筛选条件,allPhotos代表相册只包含相片,allVideos代表只包含视频,allAssets代表包含所有资源
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
//通过刚保存的照片的url,把保存到默认相册的照片也保存到test相册中
[_library assetForURL:assetURL resultBlock:^(ALAsset *asset) {
//添加资源到指定的相册
[group addAsset:asset];
//获取相册中一共的资源数量
int count = [group numberOfAssets];
NSLog(@"count:%d",count);
dispatch_queue_t main = dispatch_get_main_queue();
dispatch_async(main, ^{
//获取相册的封面图片
CGImageRef poster = [group posterImage];
});
//NSString *const ALAssetsGroupPropertyName;
//NSString *const ALAssetsGroupPropertyType;
//NSString *const ALAssetsGroupPropertyPersistentID;
//NSString *const ALAssetsGroupPropertyURL;
//查看相册的名字
NSLog(@"ALAssetsGroupPropertyName:%@",[group valueForProperty:ALAssetsGroupPropertyName]);
//查看相册的类型
NSLog(@"ALAssetsGroupPropertyType:%@",[group valueForProperty:ALAssetsGroupPropertyType]);
//查看相册的存储id
NSLog(@"ALAssetsGroupPropertyPersistentID:%@",[group valueForProperty:ALAssetsGroupPropertyPersistentID]);
//查看相册存储的位置地址
NSLog(@"ALAssetsGroupPropertyURL:%@",[group valueForProperty:ALAssetsGroupPropertyURL]);
//按遍历顺序获取指定索引的资源,遍历顺序可以是先序或倒序
/*
enum {
NSEnumerationConcurrent = (1UL << 0),
NSEnumerationReverse = (1UL << 1),
};
typedef NSUInteger NSEnumerationOptions;
*/
[group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:0] options:NSEnumerationConcurrent usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
}];
//按顺便遍历获取相册中所有的资源,index代表资源的索引,stop赋值为false时,会停止遍历
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
}];
//按顺便遍历获取相册中所有的资源,遍历顺序可以是先序或倒序,index代表资源的索引,stop赋值为false时,会停止遍历
[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
}];
} failureBlock:^(NSError *error) {
}];
}
} failureBlock:^(NSError *error) {
}];
}];
参考文章:http://blog.csdn.net/kingsley_cxz/article/category/1466803