我正在开发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中。是这样吗?
如果是,是否有任何方法(至少)将其隐藏在相机胶卷/照片流中?我想只在我的自定义相册中看到照片。
答案 0 :(得分:1)
嗯,这不是答案,而是对你的结论的确认。我开始把它写成评论,但格式化很糟糕,所以在这里添加answe。请不要介意。
只有一种方法可以添加到照片库。所有资产创建请求都将照片保存在相机胶卷中。将其添加到相册时,只会将资产的URL添加到列表中(分组在一个相册下)。自定义ablum从相机胶卷中选取所有必需的图像。
您还可以通过其他方式注意到这一点: - >如果您删除了相册中的照片,则照片会保留在相机胶卷中,但如果您将其从相机胶卷中删除,则会将其从所有自定义相册中删除。
- >如果您注意到资产如何添加到相册中,您会发现它基本上是从相机胶卷中重新获得资产。没有API可以直接将其添加到相册
答案 1 :(得分:0)
经过时尚之后,您可能需要扩展自定义专辑的定义"。如前所述,通过PhotoLibrary callls添加到相册的任何图片也会添加到相机胶卷中。
但是,您可以在应用的文档目录中为照片创建一个目录,并在那里保存照片。它们不会保存到设备相机胶卷中。相册也不会出现在照片应用中。 "自定义专辑"在这个例子中只是磁盘上的目录,您可以通过NSFileManager操作它(及其内容)。