save and delete camera roll

[iOS開發]Save video to camera roll / Delete video from camera roll

1. 儲存影片到 Camera Roll

先 import AssetsLibrary

@import AssetsLibrary;

用 writeVideoAtPathToSavedPhotosAlbum 方法,將影片存入 Camera Roll(還是叫 Photo Album,不知道哪一個說法比較多?)

NSURL *videoUrl = [NSURL fileURLWithPath:videoPath];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:videoUrl completionBlock:^(NSURL *assetURL, NSError *error) {
}];

2.從Camera Roll 刪除影片

這個方法只能使用在 iOS 8 以上的版本,據說 iOS8 之前的版本沒有辦法進行刪除的操作。並且,只能使用在由你的 APP 所建立的影片或是照片上。也就是說,如果在 Camera Roll 裡面的影片或是照片,不是由你的 APP 所建立,你依然無法對此進行刪除操作。

先 import Photos

@import Photos;

接著,因為我們使用 PHAssetChangeRequest 的 deleteAssets 方法,從 Camera Roll 裡面刪除影片,但是查詢 Apple 的 API document 會發現,

+ (void)deleteAssets:(id)assets
assets: An array of PHAsset objects to be deleted.

deleteAssets 要傳入的是 PHAsset,而上面新增影片到 Camera Roll 的方法,會回傳的只有 assetURL,所以我們必須透過這個 assetURL 取得 PHAsset。

像這樣,找到 PHAsset 後,就可以將它從 Camera Roll 中刪除拉!

PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsWithALAssetURLs:[NSArray arrayWithObjects:self.assetURL, nil] options:nil];

PHAsset *phAsset =[assetsFetchResult firstObject];

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    [PHAssetChangeRequest deleteAssets:[NSArray arrayWithObjects:phAsset, nil]];
} completionHandler:^(BOOL success, NSError *error) {
    NSLog(@"Finished deleting asset");
}];

特色圖片來源: Designed by Freepik

標籤: ,

很愛畫虎爛的我,開始了用文章唬爛社會大眾的志業!