在自定义相册中显示照片但不在相机角色/我的照片流

时间:2017-01-24 11:40:50

标签: ios phphotolibrary

我正在开发PHPhotoLibrary,我在其中创建了一个相册并将图像保存到其中。但是,保存到相册的图像也会出现在相机胶卷和我的照片流中。

我搜索了很多,没有发现任何实质性内容。

我写了一个如下功能,从相机角色和照片流中删除照片。

-(void)cleanUpCameraRoll:(NSString *)localID
{

        PHFetchResult *newlyCreatedAssetFetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[localID] options:nil];

        PHAsset *newlyCreatedAsset = [newlyCreatedAssetFetchResult firstObject];


        //Get Camera Roll
        PHFetchResult *result = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum
                                                                         subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary
                                                                         options:nil];
        PHAssetCollection *cameraRollCollection = result.firstObject;

        //Get Photo Stream Album - PHAssetCollectionSubtypeAlbumMyPhotoStream
        PHFetchResult *result2 = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum
                                                                          subtype:PHAssetCollectionSubtypeAlbumMyPhotoStream
                                                                          options:nil];
        PHAssetCollection *photoStreamCollection = result2.firstObject;

        //*********************************
        PHFetchResult *assetsCameraRoll = [PHAsset fetchAssetsInAssetCollection:cameraRollCollection options:nil];


        for (PHAsset *asset in assetsCameraRoll) {

            if ([asset.localIdentifier isEqualToString:localID]) {

                DebugLog(@"Got newly created asset in camera roll");
                break;
            }
        }


        PHFetchResult *assetsPhotoStream = [PHAsset fetchAssetsInAssetCollection:photoStreamCollection options:nil];


        for (PHAsset *asset in assetsPhotoStream) {

            if ([asset.localIdentifier isEqualToString:localID]) {

                DebugLog(@"Got newly created asset in photo stream");
                break;
            }
        }
        //*********************************
    NSError *error;
        [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{

            //Remove from Camera Roll

            PHAssetCollectionChangeRequest *changeRequest1 = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:cameraRollCollection assets:newlyCreatedAssetFetchResult];

            [changeRequest1 removeAssets:@[newlyCreatedAsset]];

            PHAssetCollectionChangeRequest *changeRequest2 = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:photoStreamCollection assets:newlyCreatedAssetFetchResult];
            [changeRequest2 removeAssets:@[newlyCreatedAsset]];

        } error:&error];
}

此代码执行良好,但我仍然可以在两个地方看到图像。

所以,我得出的结论是,专辑只是照片的逻辑分组,而且所有内容都在Camera Role和/或My Photo Stream中。是这样吗?

如果是,是否有任何方法(至少)将其隐藏在相机胶卷/照片流中?我想只在我的自定义相册中看到照片。

2 个答案:

答案 0 :(得分:1)

嗯,这不是答案,而是对你的结论的确认。我开始把它写成评论,但格式化很糟糕,所以在这里添加answe。请不要介意。

只有一种方法可以添加到照片库。所有资产创建请求都将照片保存在相机胶卷中。将其添加到相册时,只会将资产的URL添加到列表中(分组在一个相册下)。自定义ablum从相机胶卷中选取所有必需的图像。

您还可以通过其他方式注意到这一点: - >如果您删除了相册中的照片,则照片会保留在相机胶卷中,但如果您将其从相机胶卷中删除,则会将其从所有自定义相册中删除。

- >如果您注意到资产如何添加到相册中,您会发现它基本上是从相机胶卷中重新获得资产。没有API可以直接将其添加到相册

答案 1 :(得分:0)

经过时尚之后,您可能需要扩展自定义专辑的定义"。如前所述,通过PhotoLibrary callls添加到相册的任何图片也会添加到相机胶卷中。

但是,您可以在应用的文档目录中为照片创建一个目录,并在那里保存照片。它们不会保存到设备相机胶卷中。相册也不会出现在照片应用中。 "自定义专辑"在这个例子中只是磁盘上的目录,您可以通过NSFileManager操作它(及其内容)。