AssetsLibrary

AssetsLibrary

框架支持iOS 4 - iOS 9.因为目前项目还可以最低支持到iOS 8,所以写一写.其实对于一些类似QQ的使用率很高的项目都是iOS 9起了.所以建议大家还是使用PHAsset.

AssetsLibrary中有以下一些模块

/// 资源库(包含photo、video)
#import <AssetsLibrary/ALAssetsLibrary.h>
/// 映射照片库中的一个相册
#import <AssetsLibrary/ALAssetsGroup.h>
/// 对应相册中的一张照片或者视频,包含了照片或视频的详细信息,可以通过ALAsset获取缩略图.也可以通过ALAsset的实例方法保存照片或视频.
#import <AssetsLibrary/ALAsset.h>
/// 对ALAsset的封装.
#import <AssetsLibrary/ALAssetRepresentation.h>
/// 用于告诉系统是拿照片还是视频还是资源(资源包括两种)
#import <AssetsLibrary/ALAssetsFilter.h>

因为是读写资源.所以需要NSPhotoLibraryUsageDescriptionNSPhotoLibraryAddUsageDescription

ALAssetsLibrary

查询方法

- (void)enumerateGroupsWithTypes:(ALAssetsGroupType)types usingBlock:(ALAssetsLibraryGroupsEnumerationResultsBlock)enumerationBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
- (void)assetForURL:(NSURL *)assetURL resultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
- (void)groupForURL:(NSURL *)groupURL resultBlock:(ALAssetsLibraryGroupResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;

增加方法

/// 新建相册
- (void)addAssetsGroupAlbumWithName:(NSString *)name resultBlock:(ALAssetsLibraryGroupResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
/// 新建图片
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef orientation:(ALAssetOrientation)orientation completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
- (void)writeImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
/// 新建视频
- (void)writeVideoAtPathToSavedPhotosAlbum:(NSURL *)videoPathURL completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock 
typedef NS_ENUM(NSInteger, ALAssetOrientation) {
	/// 默认方向
    ALAssetOrientationUp,
	/// 180度旋转
    ALAssetOrientationDown,
    /// 90度逆时针旋转(左转90度)
    ALAssetOrientationLeft,
    /// 90度顺时针旋转(右转90度)
    ALAssetOrientationRight,
    /// 水平翻转(左右镜像)
    ALAssetOrientationUpMirrored,
    /// 垂直翻转(上下镜像)
    ALAssetOrientationDownMirrored,
    /// 左转90度
    ALAssetOrientationLeftMirrored,
    /// 右转90度
    ALAssetOrientationRightMirrored, 
}

其他方法

/// 能否保存视频到相册
- (BOOL)videoAtPathIsCompatibleWithSavedPhotosAlbum:(NSURL *)videoPathURL;

/// 权限判断
+ (ALAuthorizationStatus)authorizationStatus;

/// 关闭因为共享照片流产生的频繁通知
+ (void)disableSharedPhotoStreamsSupport;

ALAssetsGroup


/// 获取相册组的属性
- (id)valueForProperty:(NSString *)property;

/// 预览图
- (CGImageRef)posterImage;

/// 设置过滤器.如果未设置,则返回all
- (void)setAssetsFilter:(ALAssetsFilter *)filter 

/// 一共有多少asset
- (NSInteger)numberOfAssets;

/// 检索
- (void)enumerateAssetsUsingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
- (void)enumerateAssetsWithOptions:(NSEnumerationOptions)options usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
- (void)enumerateAssetsAtIndexes:(NSIndexSet *)indexSet options:(NSEnumerationOptions)options usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;

/// 如果应用允许编辑group,返回YES.否则返回NO.
@property (nonatomic, readonly, getter=isEditable) BOOL editable;

/// 添加asset成功返回YES.否则返回NO.添加前需要检查一下能否添加
- (BOOL)addAsset:(ALAsset *)asset;
Groups Properties
// Groups Properties
extern NSString *const ALAssetsGroupPropertyName 
extern NSString *const ALAssetsGroupPropertyType 
extern NSString *const ALAssetsGroupPropertyPersistentID 
extern NSString *const ALAssetsGroupPropertyURL

ALAsset

/// 获取property的值.
- (id)valueForProperty:(NSString *)property;

/// 获取具体的资源信息.
- (ALAssetRepresentation *)defaultRepresentation;

/// 根据representation UTI来返回具体资源信息
- (ALAssetRepresentation *)representationForUTI:(NSString *)representationUTI;

/// 返回适合平台类型的略缩图
- (CGImageRef)thumbnail;

/// 返回宽高比和asset相等的略缩图
- (CGImageRef)aspectRatioThumbnail;

/// 将asset写入相册(保存至相册)
- (void)writeModifiedImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;

/// 将指定路径的视频保存到相册
- (void)writeModifiedVideoAtPathToSavedPhotosAlbum:(NSURL *)videoPathURL completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock;

/// 如果已修改的未保存则返回nil.如果已修改的已保存则返回原始的asset
@property (nonatomic, readonly) ALAsset *originalAsset;

/// 能否编辑
@property (nonatomic, readonly, getter=isEditable) BOOL editable;

/// 替换asset中的图像数据
- (void)setImageData:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;

/// 替换asset中的视频数据
- (void)setVideoAtPath:(NSURL *)videoPathURL completionBlock:(ALAssetsLibraryWriteVideoCompletionBlock)completionBlock;

ALAssetRepresentation (asset详细信息,但不是asset的子类)

/// 返回UTI
- (NSString *)UTI;

/// 图片尺寸
- (CGSize)dimensions;

/// 文件大小
- (long long)size;

/// 将指定的buffer复制到缓冲区中
- (NSUInteger)getBytes:(uint8_t *)buffer fromOffset:(long long)offset length:(NSUInteger)length error:(NSError **)error;

/// 返回asset的cgimage类型(完整分辨率,理解为大图)
- (CGImageRef)fullResolutionImage;
- (CGImageRef)CGImageWithOptions:(NSDictionary *)options;

/// 返回适合全屏表示的cgimage
- (CGImageRef)fullScreenImage;

/// 唯一标识URL
- (NSURL *)url;

/// metadata类型的dic.如果系统无法识别则返回nil
- (NSDictionary *)metadata;

/// 方向
- (ALAssetOrientation)orientation;

/// 尺寸
- (float)scale;

/// 文件名
- (NSString *)filename;

ALAssetsFilter (asset类型)

/// 图片
+ (ALAssetsFilter *)allPhotos;
/// 视频
+ (ALAssetsFilter *)allVideos;
/// 所有asset(包括上面两种)
+ (ALAssetsFilter *)allAssets;

简单的示例

像相册写入一张图片

ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"jpg"]];
[assetsLibrary writeImageToSavedPhotosAlbum:image.CGImage orientation:ALAssetOrientationUp completionBlock:^(NSURL *assetURL, NSError *error) {
        
}];

新建一个相册

ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary addAssetsGroupAlbumWithName:@"test---" resultBlock:^(ALAssetsGroup *group) {

} failureBlock:^(NSError *error) {

}];

便利相册中的asset

ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
	[group setAssetsFilter:[ALAssetsFilter allAssets]];
	[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
		ALAssetRepresentation *representation = [result defaultRepresentation];
		NSURL *url = [representation url];
		NSLog(@"url: %@", url);
	}];
} failureBlock:^(NSError *error) {
        NSLog(@"error :%@" ,error);
}];
发布了268 篇原创文章 · 获赞 59 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/qq_18683985/article/details/99667160
今日推荐