iOS开发 获取系统相册最后一张图片 、 截屏广播

0. 截屏广播  UIApplicationUserDidTakeScreenshotNotification


1. iOS9.0以下,获取系统相册最后一张照片

//#import <AssetsLibrary/AssetsLibrary.h>

//NS_DEPRECATED_IOS(4_0, 9_0, "Use UIImageOrientation in the Photos framework instead");

AssetsLibrary 的组成比较符合照片库本身的组成,照片库中的完整照片库对象、相册、相片都能在 AssetsLibrary 中找到一一对应的组成,这使到 AssetsLibrary 的使用变得直观而方便。

  • AssetsLibrary: 代表整个设备中的资源库(照片库),通过 AssetsLibrary 可以获取和包括设备中的照片和视频
  • ALAssetsGroup: 映射照片库中的一个相册,通过 ALAssetsGroup 可以获取某个相册的信息,相册下的资源,同时也可以对某个相册添加资源。
  • ALAsset: 映射照片库中的一个照片或视频,通过 ALAsset 可以获取某个照片或视频的详细信息,或者保存照片和视频。
  • ALAssetRepresentation: ALAssetRepresentation 是对 ALAsset 的封装(但不是其子类),可以更方便地获取 ALAsset 中的资源信息,每个 ALAsset 都有至少有一个 ALAssetRepresentation 对象,可以通过 defaultRepresentation 获取。而例如使用系统相机应用拍摄的 RAW + JPEG 照片,则会有两个 ALAssetRepresentation,一个封装了照片的 RAW 信息,另一个则封装了照片的 JPEG 信息。

- (void)latestAsset:(void (^)(ALAsset * _Nullable, NSError *_Nullable))block {

    [self enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

        if (group) {

            [group setAssetsFilter:[ALAssetsFilter allPhotos]];

            [group enumerateAssetsWithOptions:NSEnumerationReverse/*遍历方式-反向*/ usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {

                if (result) {

                    ALAssetRepresentation *assetRep = [result defaultRepresentation];

                    CGImageRef imgRef = [assetRep fullResolutionImage];

                    UIImage *image = [[UIImage alloc] initWithCGImage:imgRef];

                    *stop = YES;

                }

            }];

            *stop = YES;

        }

    } failureBlock:^(NSError *error) {

        if (error) {

            

        }

    }];

}


2.iOS8以上可以使用 #import <Photos/Photos.h>  来获取系统的照片

  • PHAsset: 代表照片库中的一个资源,跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源
  • PHFetchOptions: 获取资源时的参数,可以传 nil,即使用系统默认值
  • PHFetchResult: 表示一系列的资源集合,也可以是相册的集合
  • PHAssetCollection: 表示一个相册或者一个时刻,或者是一个「智能相册(系统提供的特定的一系列相册,例如:最近删除,视频列表,收藏等等,如下图所示)
  • PHImageManager: 用于处理资源的加载,加载图片的过程带有缓存处理,可以通过传入一个 PHImageRequestOptions 控制资源的输出尺寸等规格
  • PHImageRequestOptions: 如上面所说,控制加载图片时的一系列参数

// 列出所有相册智能相册
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options: nil ];
 
// 列出所有用户创建的相册
PHFetchResult *topLevelUserCollections = [PHCollectionList fetchTopLevelUserCollectionsWithOptions: nil ];
 
// 获取所有资源的集合,并按资源的创建时间排序
PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.sortDescriptors = @[[ NSSortDescriptor sortDescriptorWithKey: @"creationDate" ascending: YES ]];
PHFetchResult *assetsFetchResults = [PHAsset fetchAssetsWithOptions:options];
 
// 在资源的集合中获取第一个集合,并获取其中的图片
PHCachingImageManager *imageManager = [[PHCachingImageManager alloc] init];
PHAsset *asset = assetsFetchResults[0];
[imageManager requestImageForAsset:asset
                          targetSize:SomeSize
                         contentMode:PHImageContentModeAspectFill
                             options: nil
                       resultHandler:^(UIImage *result, NSDictionary *info) {
                           
                           // 得到一张 UIImage,展示到界面上
                           
                       }];


- (void)latestAsset

{

    PHFetchOptions *options = [[PHFetchOptions alloc] init];

    PHFetchResult *assetsFetchResults = [PHAsset fetchAssetsWithOptions:options];

    PHAsset *phasset = [assetsFetchResults lastObject];

    PHCachingImageManager *imageManager = [[PHCachingImageManager alloc] init];

    [imageManager requestImageForAsset:phasset targetSize:CGSizeMake(300, 300) contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {

        

    }];

}



你可能感兴趣的:(ios,截屏广播,获取系统照片)