2017-01-24 163 views
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]; 
} 

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

所以,我得出的结论是,相册只是照片的逻辑分组,并且所有内容都位于相机角色和/或我的照片流中。是这样吗?

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

+0

从互联网你节省?如果是这样,您可以使用图像元数据从相机胶卷中找到。 – karthikeyan

+0

谢谢Karthik,您的回复。我正在获取图像信息。但是,我的问题是,我是否可以停止在相机胶卷中显示图像。 –

+0

如果是自定义相机胶卷视图,则可以将其停止。有很多工作可以证实,我们之前做过类似的工作,喜欢从某张专辑停止播放。 – karthikeyan

回答

1

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

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

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

- >如果您注意到资产如何添加到相册中,您会注意到它基本上是从相机胶卷中回收资产。有没有API直接添加到专辑

+0

谢谢你的回复,Shravya。您可以在文档中提供一个参考资料,其中提及资产的URL映射到专辑?另外,重复我的第二个问题......你是否知道一种方法,至少可以将照片隐藏在相机胶卷中? –

+0

这大部分是基于我提到的可用API和不同实验的观察结果。如果您查看较早的ALAssetLibrary API,这一点非常明显。 –

+0

我不知道有什么方法隐藏相机胶卷中的照片。如果我遇到了什么,我一定会更新它。虽然,我记得我在iPhone 5S中发现了一个错误,一些老照片被隐藏,除非你将日期倒过来。所以,可能有一些方法,但不公开 –