iOS中相册-用一个tableView区分照片和video

[objc] view plaincopyprint?

  1. <span style="font-size:18px;">
  2. #import "ViewController.h"
  3. @interface ViewController ()
  4. @property(nonatomic,strong)UITableView *tableView;
  5. @property(nonatomic,strong)NSMutableArray *assets;// 照片数组
  6. @property(nonatomic,strong)NSMutableArray *videoArr;// 视频数组
  7. @property(nonatomic,strong)ALAssetsLibrary *library;
  8. @end
  9. @implementation ViewController
  10. - (void)viewDidLoad
  11. {
  12. [super viewDidLoad];
  13. self.view.backgroundColor = [UIColor blackColor];
  14. NSLog(@"%ld", [ALAssetsLibrary authorizationStatus]);
  15. self.assets = [[NSMutableArray alloc]initWithCapacity:0];
  16. self.videoArr = [[NSMutableArray alloc]initWithCapacity:0];
  17. self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 50, 320, 416) style:UITableViewStyleGrouped];
  18. self.tableView.delegate = self;
  19. self.tableView.dataSource = self;
  20. [self.view addSubview:self.tableView];
  21. UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, self.tableView.frame.size.height+70, 320, 80)];
  22. view.backgroundColor = [UIColor yellowColor];
  23. UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  24. btn1.frame = CGRectMake(10, 10, 100, 50);
  25. [btn1 setTitle:@"测试添加相册" forState:UIControlStateNormal];
  26. [btn1 addTarget:self action:@selector(addGroud) forControlEvents:UIControlEventTouchUpInside];
  27. [view addSubview:btn1];
  28. [self.view addSubview:view];
  29. self.library = [[ALAssetsLibrary alloc] init];
  30. void (^assetEnumerator)(ALAsset *, NSUInteger, BOOLBOOL *) = ^(ALAsset *result, NSUInteger index, BOOLBOOL *stop) {
  31. if(result != NULL) {
  32. if ([result valueForProperty:ALAssetPropertyType] == ALAssetTypeVideo) {
  33. [self.videoArr addObject:result];
  34. }else if([result valueForProperty:ALAssetPropertyType] == ALAssetTypePhoto){
  35. [self.assets addObject:result];
  36. }
  37. }
  38. };
  39. //便利相册
  40. void (^assetGroupEnumerator)(ALAssetsGroup *, BOOLBOOL *) =  ^(ALAssetsGroup *group, BOOLBOOL *stop) {
  41. if(group != nil) {
  42. [group enumerateAssetsUsingBlock:assetEnumerator];
  43. }
  44. [self.tableView reloadData];
  45. };
  46. //    //便利所有相册
  47. [self.library enumerateGroupsWithTypes:ALAssetsGroupAll
  48. usingBlock:assetGroupEnumerator
  49. failureBlock: ^(NSError *error) {
  50. NSLog(@"便利所有相册");
  51. }];
  52. [self.tableView reloadData];
  53. }
  54. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
  55. return 2;
  56. }
  57. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  58. if (section == 0) {
  59. if ([self.assets count]>5) {
  60. return 5;
  61. }else{
  62. return [self.assets count];
  63. }
  64. }else{
  65. if ([self.videoArr count]>5) {
  66. return 5;
  67. }else{
  68. return [self.videoArr count];
  69. }
  70. }
  71. }
  72. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  73. static NSString *CellIdentifier = @"Cell";
  74. UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  75. if (cell == nil) {
  76. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  77. }
  78. if (indexPath.section == 0) {
  79. ALAsset *asset = [self.assets objectAtIndex:indexPath.row];
  80. struct CGImage *imagecg = asset.thumbnail;
  81. UIImage *image = [UIImage imageWithCGImage:imagecg];
  82. [cell.imageView setImage:image];
  83. [cell.textLabel setText:[NSString stringWithFormat:@"Photo %d", indexPath.row+1]];
  84. }else if (indexPath.section == 1){
  85. ALAsset *asset = [self.videoArr objectAtIndex:indexPath.row];
  86. struct CGImage *imagecg = asset.thumbnail;
  87. UIImage *image = [UIImage imageWithCGImage:imagecg];
  88. [cell.imageView setImage:image];
  89. [cell.textLabel setText:[NSString stringWithFormat:@"video %d", indexPath.row+1]];
  90. }
  91. return cell;
  92. }
  93. </span>

添加一个图片到默认相册

[objc] view plaincopyprint?

  1. <span style="font-size:18px;">
  2. //添加图片到相册
  3. NSString *path = [[NSBundle mainBundle] pathForResource:@"123" ofType:@"png"];
  4. NSURL *urll = [NSURL fileURLWithPath:path];
  5. NSData *data = [NSData dataWithContentsOfURL:urll];
  6. [_library writeImageDataToSavedPhotosAlbum:data metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
  7. }];
  8. //保存图片到系统默认的相册中,使用nsdata的形式,并返回照片的url地址
  9. [_library writeImageDataToSavedPhotosAlbum:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
  10. }];</span>

创建一个相册

[objc] view plaincopyprint?

  1. <span style="font-size:18px;">- (void)addGroud{
  2. [self.library addAssetsGroupAlbumWithName:@"测试添加相册" resultBlock:^(ALAssetsGroup *group) {
  3. NSLog(@"addAssetsGroupAlbumWithName");
  4. //        //查看相册的名字
  5. NSLog(@"ALAssetsGroupPropertyName:%@",[group valueForProperty:ALAssetsGroupPropertyName]);
  6. //        //查看相册的类型
  7. NSLog(@"ALAssetsGroupPropertyType:%@",[group valueForProperty:ALAssetsGroupPropertyType]);
  8. //        //查看相册的存储id
  9. NSLog(@"ALAssetsGroupPropertyPersistentID:%@",[group valueForProperty:ALAssetsGroupPropertyPersistentID]);
  10. //        //查看相册存储的位置地址
  11. NSLog(@"ALAssetsGroupPropertyURL:%@",[group valueForProperty:ALAssetsGroupPropertyURL]);
  12. NSURL *groupURL = [group valueForProperty:ALAssetsGroupPropertyURL];
  13. } failureBlock:^(NSError *error) {
  14. NSLog(@"ERR : %@",error);
  15. }];
  16. }
  17. </span>

保存video到相册

[objc] view plaincopyprint?

  1. <span style="font-size:18px;">
  2. //保存video到相册
  3. - (void)saveVideo:(NSString *)videoPath toAlbum:(NSString *)albumName withCompletionBlock:(SaveImageCompletion)completionBlock
  4. {
  5. [self writeVideoAtPathToSavedPhotosAlbum:[NSURL fileURLWithPath:videoPath]
  6. completionBlock:^(NSURL *assetURL, NSError *error) {
  7. if (error!=nil) {
  8. completionBlock(error);
  9. return;
  10. }
  11. //add the asset to the custom photo album
  12. [self addAssetURL: assetURL
  13. toAlbum:albumName
  14. withCompletionBlock:completionBlock];
  15. }];
  16. }
  17. -(void)addAssetURL:(NSURL*)assetURL toAlbum:(NSString*)albumName withCompletionBlock:(SaveImageCompletion)completionBlock
  18. {
  19. __block BOOL albumWasFound = NO;
  20. //search all photo albums in the library
  21. //遍历相册
  22. [self enumerateGroupsWithTypes:ALAssetsGroupAlbum
  23. usingBlock:^(ALAssetsGroup *group, BOOLBOOL *stop) {
  24. //compare the names of the albums
  25. if ([albumName compare: [group valueForProperty:ALAssetsGroupPropertyName]]==NSOrderedSame) {
  26. //target album is found
  27. albumWasFound = YES;
  28. //get a hold of the photo‘s asset instance
  29. //通过url得到asset
  30. [self assetForURL: assetURL
  31. resultBlock:^(ALAsset *asset) {
  32. //add photo to the target album
  33. [group addAsset: asset];
  34. //run the completion block
  35. completionBlock(nil);
  36. } failureBlock: completionBlock];
  37. //album was found, bail out of the method
  38. return;
  39. }
  40. //如果没有 创建相册加入asset
  41. if (group==nil && albumWasFound==NO) {
  42. //photo albums are over, target album does not exist, thus create it
  43. ALAssetsLibrary* weakSelf = self;
  44. //create new assets album
  45. [self addAssetsGroupAlbumWithName:albumName
  46. resultBlock:^(ALAssetsGroup *group) {
  47. //get the photo‘s instance
  48. [weakSelf assetForURL: assetURL
  49. resultBlock:^(ALAsset *asset) {
  50. //add photo to the newly created album
  51. [group addAsset: asset];
  52. //call the completion block
  53. completionBlock(nil);
  54. } failureBlock: completionBlock];
  55. } failureBlock: completionBlock];
  56. //should be the last iteration anyway, but just in case
  57. return;
  58. }
  59. } failureBlock: completionBlock];
  60. }
  61. </span>

保存png到指定相册

[objc] view plaincopyprint?

  1. <span style="font-size:18px;">
  2. //保存图片到系统默认的相册中,使用cgimageref的形式,并且选择图片以什么旋转方向的形式保存,并返回照片的url地址
  3. /*
  4. typedef enum {
  5. ALAssetOrientationUp,            // default orientation
  6. ALAssetOrientationDown,          // 180 deg rotation
  7. ALAssetOrientationLeft,          // 90 deg CCW
  8. ALAssetOrientationRight,         // 90 deg CW
  9. ALAssetOrientationUpMirrored,    // as above but image mirrored along other axis. horizontal flip
  10. ALAssetOrientationDownMirrored,  // horizontal flip
  11. ALAssetOrientationLeftMirrored,  // vertical flip
  12. ALAssetOrientationRightMirrored, // vertical flip
  13. } ALAssetOrientation;
  14. */
  15. UIImage* image = [UIImage imageNamed:@"123"];
  16. [_library writeImageToSavedPhotosAlbum:[image CGImage] orientation:ALAssetOrientationLeft completionBlock:^(NSURL *assetURL, NSError *error) {
  17. NSLog(@"save image:%@",assetURL);
  18. //通过ALAssetsLibrary迭代取出所有相册
  19. [_library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOLBOOL *stop) {
  20. NSString* groupname = [group valueForProperty:ALAssetsGroupPropertyName];
  21. //如果相册的名称是test的时候,对其进行操作
  22. if ([groupname isEqualToString:@"测试添加相册"]) {
  23. //设置相册组的筛选条件,ALAssetsFilter类表示筛选条件,allPhotos代表相册只包含相片,allVideos代表只包含视频,allAssets代表包含所有资源
  24. [group setAssetsFilter:[ALAssetsFilter allPhotos]];
  25. //通过刚保存的照片的url,把保存到默认相册的照片也保存到test相册中
  26. [_library assetForURL:assetURL resultBlock:^(ALAsset *asset) {
  27. //添加资源到指定的相册
  28. [group addAsset:asset];
  29. //获取相册中一共的资源数量
  30. int count = [group numberOfAssets];
  31. NSLog(@"count:%d",count);
  32. dispatch_queue_t main = dispatch_get_main_queue();
  33. dispatch_async(main, ^{
  34. //获取相册的封面图片
  35. CGImageRef poster = [group posterImage];
  36. });
  37. //NSString *const ALAssetsGroupPropertyName;
  38. //NSString *const ALAssetsGroupPropertyType;
  39. //NSString *const ALAssetsGroupPropertyPersistentID;
  40. //NSString *const ALAssetsGroupPropertyURL;
  41. //查看相册的名字
  42. NSLog(@"ALAssetsGroupPropertyName:%@",[group valueForProperty:ALAssetsGroupPropertyName]);
  43. //查看相册的类型
  44. NSLog(@"ALAssetsGroupPropertyType:%@",[group valueForProperty:ALAssetsGroupPropertyType]);
  45. //查看相册的存储id
  46. NSLog(@"ALAssetsGroupPropertyPersistentID:%@",[group valueForProperty:ALAssetsGroupPropertyPersistentID]);
  47. //查看相册存储的位置地址
  48. NSLog(@"ALAssetsGroupPropertyURL:%@",[group valueForProperty:ALAssetsGroupPropertyURL]);
  49. //按遍历顺序获取指定索引的资源,遍历顺序可以是先序或倒序
  50. /*
  51. enum {
  52. NSEnumerationConcurrent = (1UL << 0),
  53. NSEnumerationReverse = (1UL << 1),
  54. };
  55. typedef NSUInteger NSEnumerationOptions;
  56. */
  57. [group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:0] options:NSEnumerationConcurrent usingBlock:^(ALAsset *result, NSUInteger index, BOOLBOOL *stop) {
  58. }];
  59. //按顺便遍历获取相册中所有的资源,index代表资源的索引,stop赋值为false时,会停止遍历
  60. [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOLBOOL *stop) {
  61. }];
  62. //按顺便遍历获取相册中所有的资源,遍历顺序可以是先序或倒序,index代表资源的索引,stop赋值为false时,会停止遍历
  63. [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOLBOOL *stop) {
  64. }];
  65. } failureBlock:^(NSError *error) {
  66. }];
  67. }
  68. } failureBlock:^(NSError *error) {
  69. }];
  70. }];
  71. </span>

参考文章:http://blog.csdn.net/kingsley_cxz/article/category/1466803

时间: 2024-11-07 14:49:42

iOS中相册-用一个tableView区分照片和video的相关文章

iOS中如何创建一个滑出式导航面板(1)

本文将介绍如何创建类似Facebook和Path iOS程序中的滑出式导航面板. 向右滑动 滑出式设计模式可以让开发者在程序中添加常用的导航功能,又不会浪费屏幕上宝贵的空间.用户可以在任意时间滑出导航面板,并且还可以看到当前屏幕上显示的内容. 现在,互联网上有些库已经内置滑出式设计模式,比如John-Lluch开发的SWRevealViewController.如果你在寻找更加快捷和简单的方法,那么使用SWRevealViewController库可能是一个很不错的方法. 不过,如果你是一名DI

iOS中使用 Reachability 检测网络区分手机网络类型 WiFi 和2 3 4 G

如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder),或者在没有网络状态下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测. 写本文的目的 了解Reachability都能做什么 检测3中网络环境 2G/3G wifi 无网络 如何使用通知 单个controller 多个controller 简单的功能: 仅在wifi下使用 Reachability简介 Reachablity 是一个iOS下检测,iOS设备网络环境用的库. 监视目标网络是否可

ios中封装网络和tableview的综合运用

#import <Foundation/Foundation.h> #import "ASIFormDataRequest.h" #import "Reachability.h" @protocol NetWorkDelegate; @interface JSNetWord : NSObject<ASIHTTPRequestDelegate> +(id)ShareNetwork; -(void)NetWorkWithConnctId:(int

iOS中UIWebView的一个需求:获得js图片请求完成的回调时机

不久之前,项目中用到了UIWebView加载js的功能,之前使用webView都是简单使用,没考虑很多与js交互的地方,虽然现在项目完成了,但是回头看看这方面的知识还是有些茫然,在此记录一点,然后后续如果有用更多的话再来进行补充. 需求 封装个view,提供给开发者使用,暴露两个方法以供调用: 1.是调用initWithXXX进行初始化位置等等参数配置: 2.调用loadH5PageWithSuccessBlock:failureBlock:让view中的webView加载H5页面显示出来即可.

ios 中scrollview上面嵌套tableView,左右滑动出现数据多次刷新的问题

注意scrollView左右滑动时不要刷新数据,刚进来时一次性请求所有数据 红包纪录和房源信息可以左右滑动和点击,tableView可以上下滑动,图片部分个人信息只刷新一次. 界面布局如下

iOS中手势的使用

在iOS中添加手势比较简单,可以归纳为以下几个步骤: 创建对应的手势对象: 设置手势识别属性[可选]: 附加手势到指定的对象: 编写手势操作方法: 为了帮助大家理解,下面以一个图片查看程序演示一下上面几种手势,在这个程序中我们完成以下功能: 如果点按图片会在导航栏显示图片名称: 如果长按图片会显示删除按钮,提示用户是否删除: 如果捏合会放大.缩小图片: 如果轻扫会切换到下一张或上一张图片: 如果旋转会旋转图片: 如果拖动会移动图片: 具体布局草图如下: 为了显示导航条,我们首先将主视图控制器KC

iOS中的动画

什么是动画,动画其实就是我们看到的画面变化的一个过程 那么在iOS中,实现一个最简单的动画需要几步呢? a Simple animation { // 1.开启动画 [UIViewbeginAnimations:nilcontext:nil]; [UIViewsetAnimationDuration:2.0]; // 2.修改属性 CGRect tempF = self.head.frame; tempF.origin.x += 50; tempF.origin.y += 100; tempF.

iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏)

iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏) 2017.03.16 12:18* 字数 52 阅读 563评论 4喜欢 2 1. 截取屏幕尺寸大小的图片并保存至相册 保存至相册只需将方法saveImage中的代码替换即可 UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, 0.0); [self.view.layer renderInContext:UIGraphicsGetCur

iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见

iOS中关于动态Tableview中的cell数据传输的多线程问题解决之拙见 (2015-12-05 12:48:20)[编辑][删除] 转载▼     首先我们先明确一下问题: 1.因为UI是在主线程中更新的,不能在down数据的同时显示界面,这样会使得下载的时间占用主线程,导致的后果就是你的屏幕就那样的卡死在哪了 2.如果要解觉问题1,就势必要将其下载数据的环节放在其他分线程上来实现,但是这里还会遇见一个问题,分线程的执行是不会有序的,这样,在动态显示的过 程中,cell中的数据就会混乱的变