3

我正在研究 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];
}

这段代码执行得很好,但我仍然在这两个地方看到了图像。

所以,我得出一个结论,相册只是照片的逻辑分组,一切都在相机角色和/或我的照片流中。是这样吗?

如果是的话,有没有办法(至少)让它隐藏在相机胶卷/照片流中?我想让照片仅在我的自定义相册中可见。

4

2 回答 2

1

好吧,这不是答案,而是对您的结论的确认。我开始写这个作为评论,但格式不好,所以在这里添加答案。请不要介意。

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

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

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

于 2017-01-24T12:03:42.283 回答
0

这是可能的,但您需要扩展“自定义相册”的定义。如前所述,通过 PhotoLibrary 调用添加到相册的任何图片也会添加到相机胶卷中。

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

于 2018-04-25T13:08:48.503 回答