2017-01-24 214 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中發現了一個錯誤,一些老照片被隱藏,除非你將日期倒過來。所以,可能有一些方法,但不公開 –