AssetsLibrary使用介绍

一、概述
  
  AssetsLibrary框架:从iOS4.0开始提供,可以通过它获取设备里的图片和视频等资料,以API的方式提供,而且界面式的,比UIImagePickerViewController灵活很多。既可以读又可以写。

二、读取资料库中的全部资料

1.大概步骤,首先通过ALAssetsLibrary获取group,然后再获取每个group中的每个ALAsset,通过ALAsset获取图片或者视频链接。

2.获取全部资料(ALAsset)以及链接:

  NSMutableArray *assetGroups = [[NSMutableArray alloc] init];
  void (^assetGroupEnumerator) (struct ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop{
    if(group != nil) {
       [assetGroups addObject:group];
    }
  };
 
  ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
  NSUInteger groupTypes = ALAssetsGroupAll; 
  [library enumerateGroupsWithTypes:groupTypes usingBlock:assetGroupEnumerator failureBlock:nil];
  [library release];
 
  NSMutableArray *assets = [[NSMutableArray alloc] init];
  NSMutableArray *assetURLArray = [[NSMutableArray alloc] init];
  void (^assetEnumerator) (struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
    if(result != nil) {
       if(![assetURLArray containsObject:[result valueForProperty:ALAssetPropertyURLs]]) {
         if(![[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]) {
           [assetURLArray addObject:[result valueForProperty:ALAssetPropertyURLs]];
           [assets addObject:result];
         }
       }
    }
  };
 
  for (ALAssetsGroup *group in assetGroups) {
     [group enumerateAssetsUsingBlock:assetEnumerator];
  }
  
3.通过ALAsset链接获取图片或者视频内容
    
  ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *returnAsset){   
     //获取资料的缩略图,图片视频通用
     UIImage *image = [UIImage imageWithCGImage:returnAsset.defaultRepresentation.fullResolutionImage];
     
     //针对图片或者视频做自定义处理
     NSString *type = [returnAsset valueForProperty:ALAssetPropertyType];
     if([type isEqualToString:ALAssetTypePhoto]){
         
     }else if([type isEqualToString:ALAssetTypeVideo]){
      //获取视频时长
        NSNumber *duration = [returnAsset valueForProperty:ALAssetPropertyDuration]
     }  
  };
    
  NSString *assetURL = [assetURLArray objectAtIndex:0];
  ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
  [library assetForURL:[NSURL URLWithString:assetURL] resultBlock:resultblock failureBlock:nil];
  [library release];
  
4.有时候有些视频资料没有写入资料库,但是我们仍然需要获取视频的时长。这时候我们就不能用第3条中提到的API来获取视频长度,我们可以采用AVFoundation框架中的一个类:AVURLAsset。
  代码如下:
  AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
  CMTime ctTime = asset.duration;
  [asset release];
  NSInteger totalSeconds = ctTime.value / ctTime.timescale;

三、将本地图片或者视频写入资料库

1.步骤:调用ALAssetsLibrary将视频或者图片写入资料库,写入成功之后,返回一个URL链接。

2.代码:
  ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
  if([cacheFilePath rangeOfString:@"jpg" options:NSCaseInsensitiveSearch].length > 0 ||
     [cacheFilePath rangeOfString:@"png" options:NSCaseInsensitiveSearch].length > 0)
  {
     UIImage *image = [UIImage imageWithContentsOfFile:cacheFilePath];
     [library writeImageToSavedPhotosAlbum:image.CGImage metadata:nil completionBlock:^(NSURL *assetURL, NSError *error){
        NSString *assetUrlString = assetURL.absoluteString;
        //根据需求做相应动作,比如保存这个链接
     }];
  }else{
     NSURL *cacheURL = [NSURL URLWithString:cacheFilePath];
     [library writeVideoAtPathToSavedPhotosAlbum:cacheURL completionBlock:^(NSURL *assetURL, NSError *error){
        NSString *assetUrlString = assetURL.absoluteString;
        //根据需求做相应动作,比如保存这个链接
     }];
  }
  [library release];

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Objective-C成员变量声明方式探究

一、interface和 property 方式声明变量的区别1.你可以单独在interface中定义变量,而不用property定义;也可以只用property去定义,而不在interface中定义,当然用了property去定义,一般要在.m文件中用synthsize去合成相…

web处理高并发措施

高并发处理的思路,从几个方面进行解决 先来了解几个名词 QPS: 每秒处理的请求数量! 响应时间: 处理一个请求需要的时间! 吞吐量: 单位时间内的处理请求数量! 最大并发数: 同一时间能支持的最大请求数! 1、流量处…

经典逻辑编程题(本文用python实现)

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思…

@interface使用详解

1.interface可以实现三种功能&#xff1a;(1)声明类:Class(2)声明类别:Category(3)声明扩展:Extension2.声明类&#xff1a;这个就比较常用了&#xff0c;在这里不多说。代码&#xff1a;interface SomeClass : NSObject <SomeDelegate>{}end3.声明类别&#xff1a;(1)类…

同一账号多处登录问题

思路 用户每次登录时生存一个随机字符串保存在服务器和客户端&#xff0c;用户每次访问验证这个字符串&#xff0c;不通过时则要求用户下线&#xff0c; 如果有两个用户先后分别登录同一个帐号&#xff0c;则后登录的那位产生的字符串必然会覆盖先登录的那位&#xff0c; 然后…

iOS中HTTP请求使用cookie

一、iOS中Http请求对cookie的默认处理&#xff1a;1.一直以为ios的http请求不会自动处理请求中的cookie&#xff0c;所以一直认为客户端请求默认是没有Session的&#xff0c;现在发现自己的想法错了很久。2.NSURLRequest默认的处理过程&#xff1a;类似于服务器端和网页端的ses…

python基础题

import functools from decimal import Decimal 字符串反转 import timea hello b functools.reduce(lambda x,y:yx,a) print(b) print(type(b))c .join(list(a)[::-1]) print(c)查找字符串 str_1我爱你中国 char_1中国 nPosstr_1.index(char_1) print(nPos)数组合并去重排…

[Cordova]JS和Native交互实现关键代码(iOS)

一、JS中定义的exec函数&#xff1a;define("cordova/exec", function(require, exports, module) 。关键实现代码如下&#xff1a;1.建立command对象&#xff0c;并且将命令推入commandQueuevar command [callbackId, service, action, actionArgs];commandQueue.p…

win10专业版激活方法——亲测可行!!!

转自:https://blog.csdn.net/AinUser/article/details/79247841 1.首先在桌面左下角的“cortana”搜索框中输入“CMD”&#xff0c;待出现“命令提示符”工具时&#xff0c;右击选择“以管理员身份”运行。 2.此时将“以管理员身份”打开“MSDOS”窗口&#xff0c;在此界面中&…

CoreData简介

一、概念 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是&#xff1a;SQLite数据库&#xff0c;XML&#xff0c;二进制&#xff0c;内存里&#xff0c;或自定义数据类型 3.好处&#xff1a;能够合理管理内存&#xff0c;避免使用sql的麻烦&#xff0c;高效…

synthesize和dynamic

在声明property属性后&#xff0c;有2种实现选择一、synthesize编译器期间&#xff0c;让编译器自动生成getter/setter方法。当有自定义的存或取方法时&#xff0c;自定义会屏蔽自动生成该方法.二、dynamic告诉编译器&#xff0c;不自动生成getter/setter方法&#xff0c;避免编…

NSZombieEnabled使用

我们做iOS 程序开发时经常用遇到 EXC_BAD_ACCESS 错误导致 Crash&#xff0c;出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源&#xff0c;只是在应用 Delegate 上留下像Thread 1: Program received signal:"EXC_BAD_ACCESS"&#xff0c;让问题无从找起…

XCode的控制台调试命令

XCode4.0以后&#xff0c;编译器换成了LLVM 编译器 2.0&#xff0c;与以前相比&#xff0c;更加强大&#xff1a; 1.LLVM 编译器是下一带开源的编译技术.完全支持C, Objective-C, 和 C. 2.LLVM 速度比 GCC快两倍,建立的程序也会运行的更快. 因为它更好的利用现代的芯片的结构. …

通过终端,查看sqlite3的存储文件

在调试应用的时候&#xff0c;可以查看数据库里的数据。 1、定位到模拟器的目录 cd ~/Library/Application\ Support/iPhone\ Simulator 2、查找文件名包含 OrgChart.sqlite的文件&#xff0c;并打印路径 find . -name "OrgChart.sqlite" –print 输出&#xff1a; .…

NSURLCache缓存使用简介

一、需求1.在IOS应用程序开发中&#xff0c;为了减少与服务端的交互次数&#xff0c;加快用户的响应速度&#xff0c;一般都会在IOS设备中加一个缓存的机制。使用缓存的目的是为了使用的应用程序能更快速的响应用户输入&#xff0c;是程序高效的运行。有时候我们需要将远程web服…

获取GIF图片中所有的单图

一、场景需求iOS系统中不支持flash&#xff0c;所以gif图片无法播放。需要将gif中的所有单图拿出来&#xff0c;自己来实现轮播动画。ImageIO框架中提供了获取gif图片中所有单图的相关API。二、使用简介1.首先根据gif图片文件初始化CGImageSourceRef&#xff1a;CFDataRef可以通…

回头看看NSURLConnection

一、基础代理1.使用场景&#xff1a;网络错误提示&#xff0c;以及证书使用控制。2.协议内容protocol NSURLConnectionDelegate <NSObject>optional- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;- (BOOL)connectionShouldUseCre…

生成同时兼容iOS真机和模拟器的.a包

一、步骤&#xff1a;1.首先分别生成模拟器架构和真机架构的.a包&#xff0c;然后在合并。2.使用命令&#xff1a;lipo -create 模拟器架构.a 真机架构.a -output 兼容架构.a3.其它有用的功能&#xff1a;&#xff08;1&#xff09;查看某一个.a包都支持什么架构&#xff1a;li…

iOS的事件分发

移动平台上的开发主要关注数据以及数据的处理&#xff0c;事件的处理以及UI。所以事件的分发处理是很重要的一个环节&#xff0c;对于一个平台的优劣来说也是一项重要的参数。如果事件的分发设计的不好&#xff0c;一些复杂的UI场景就会变得很难写甚至没法写。从小屏没有触摸的…

iOS开发ARC入门和使用

本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容&#xff0c;仅用于技术交流和讨论。请不要将本文的部分或全部内容用于商用&#xff0c;谢谢合作。 欢迎转载本文&#xff0c;但是转载请注明本文出处&#xff1a;http://www.onevcat.com/2012/06/arc-hand-by-han…