zoukankan      html  css  js  c++  java
  • Photos框架保存图片到本地相册及自定义相册中

    /*

     一、 Photos框架:主要操作--------增删查改

     1.PHAsset: 一个PHAsset对象就代表着一个图片或者视频

     1> 查:[PHAsset fetchAssets...]

     2> 增删改: PHAssetChangeRequest  (所有跟图片/视频相关的改动)

     2.PHAssetCollection:一个PHAssetCollection对象代表一个相册

     1> 查: [PHAssetCollection fetchAsset...]

     2> 增删改: PHAssetCollectionChangeRequest   (所有跟相册相关的改动)

     二、须知

     1.对相册还是图片、视频的任何【增删改】操作,都必须在performChanges或者 performChangesAndWait的block里执行,不然会报错,

    例如:

    'This method can only be called from inside of -[PHPhotoLibrary performChanges:completionHandler:] or -[PHPhotoLibrary performChangesAndWait:error:]'

    三、具体的保存步骤如下

     // 1.保存到相册【相机胶卷】

        __block NSString *assetID = nil;

        NSError *error = nil;

        [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{

            assetID = [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset.localIdentifier;

        } error:&error];

        if (error) return nil;

        // 2.获取刚才保存的相片

        PHFetchResult<PHAsset *> *createAssets = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetID] options:nil];

       

       //3.获取相册

        PHFetchResult<PHAssetCollection *> *collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];

        // 相册的名字,一般都是获取软件的名字

        NSString *title = [NSBundle mainBundle].infoDictionary[(__bridge NSString *)kCFBundleNameKey];

        

        // 查找当前app对应的相册

       __block PHAssetCollection *createdCollection = nil;

        for (PHAssetCollection *collection in collections) {

            //当前app对应的相册已经存在

            if([collection.localizedTitle isEqualToString:title]){

               createdCollection = collection;

            }

        }

        // 当前app对应的相册不存在,创建一个相册

        // 同步执行修改操作

        NSError *error = nil;

        __block NSString *ID = nil;

        [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{

            // 创建相册的唯一标识

            ID = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title].placeholderForCreatedAssetCollection.localIdentifier;

        } error:&error];

        if (error) return nil;

        // 根据唯一标识抓取到相册

        createdCollection = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[ID] options:nil].lastObject;

    // 4.保存图片到自定义相册

        [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{

            PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdCollection];

            //最后添加的图片放在最前面

            [request insertAssets:createAssets atIndexes:[NSIndexSet indexSetWithIndex:0]];

        } error:&error];

        

  • 相关阅读:
    [Android学习系列11]关于Android数据存储的一些事
    [PHP系列1]session和cookie的一些事
    [Android学习系列10]关于Task,Activity,BackStack的一些事
    [Android学习系列9]关于Fragment的一些事
    [Android学习系列8]数据库ormlite笔记
    [Android学习系列7]数据库学习笔记
    JAVA与C++对比 --– 虚函数、抽象函数、抽象类、接口
    iOS常用控件尺寸大集合
    ios 几种快速写法
    一些好的IOS blog 不断增加中。。。。
  • 原文地址:https://www.cnblogs.com/MJP334414/p/6141698.html
Copyright © 2011-2022 走看看