我想以编程方式从重复的相册中删除资产(照片不是)。我可以使用照片框架删除相册
我想知道如何从相册中删除资产而不从照片应用程序中完全删除它。我想在多个地方使用它,例如将资产从一张专辑移动到另一张专辑等
相册在我创建时是可编辑的。
有没有办法在 iOS 6 或 iOS 7 的设备上执行此操作?
我想以编程方式从重复的相册中删除资产(照片不是)。我可以使用照片框架删除相册
我想知道如何从相册中删除资产而不从照片应用程序中完全删除它。我想在多个地方使用它,例如将资产从一张专辑移动到另一张专辑等
相册在我创建时是可编辑的。
有没有办法在 iOS 6 或 iOS 7 的设备上执行此操作?
在 iOS 8 及更高版本中,您可以使用以下代码从相册中删除照片,而无需从照片应用程序中完全删除照片。
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest
changeRequestForAssetCollection:self.myAlbum
assets:self.albumAssetsFetchResult];
[request removeAssets:@[asset]];
} completionHandler:^(BOOL success, NSError *error) {
NSLog(@"Finished removing asset from the album. %@", (success ? @"Success" : error));
}];
Swift 4 版本的 Tgiri 的答案,如果它对任何人都有帮助:
// you want to pass in your asset collection and asset
let album: PHAssetCollection
let asset: PHAsset
PHPhotoLibrary.shared().performChanges({
guard let albumChangeRequest = PHAssetCollectionChangeRequest(for: album) else { return }
let fastEnumeration = NSArray(array: [asset])
albumChangeRequest.removeAssets(fastEnumeration)
}, completionHandler: { success, error in
if success {
print("removed")
} else {
print("not removed")
}
})
您可以imageData
将该图像的 设置为 nil,这样您就可以删除图像。
ALAssetsLibrary *lib = [ALAssetsLibrary new];
[lib enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{
if(group == nil)
{
return ;
}
if([[group valueForProperty:ALAssetsGroupPropertyName] isEqualToString:@"YourAlbumNam"])
{
[group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop)
{
if(asset.isEditable)
{
if([[asset valueForProperty:ALAssetPropertyAssetURL] isEqual:yourAssetURL] )
{
[asset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error)
{
// Check for error
}];
}
}
}];
}
failureBlock:^(NSError *error)
{
}];