首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 相簿圖片替換方案:UIImageWriteToSavedPhotosAlbum 最佳實踐

     編輯:程式設計綜合問答

核心 API

// 保存圖片到相簿(系統自動處理權限、重複檢測)
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

// 回調方法
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
    if (error) {
        NSLog(@"保存失敗: %@", error.localizedDescription);
    } else {
        NSLog(@"保存成功");
    }
}

替換邏輯實現

iOS 沒有直接「替換」API,標準流程:

  1. 編輯生成新 UIImage
  2. 保存新圖片到相簿
  3. (可選)刪除舊資源:需使用 PHAssetChangeRequest.deleteAssets,要求用戶授權「照片」完全訪問權限

Photos 框架完整替換代碼

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    // 1. 創建新資源
    PHAssetCreationRequest *creation = [PHAssetCreationRequest creationRequestForAsset];
    [creation addResourceWithType:PHAssetResourceTypePhoto data:imageData options:nil];
    
    // 2. 刪除舊資源 (需 assetLocalIdentifier)
    PHAsset *oldAsset = [PHAsset fetchAssetWithLocalIdentifiers:@[oldId] options:nil].firstObject;
    [PHAssetChangeRequest deleteAssets:@[oldAsset]];
} completionHandler:^(BOOL success, NSError *error) {
    if (success) NSLog(@"替換完成");
}];

注意事項

  • Info.plist 需 NSPhotoLibraryAddUsageDescription 與 NSPhotoLibraryUsageDescription
  • 刪除操作不可逆,建議提供「還原」功能
  • 大批量操作使用 PHAssetChangeRequest.creationRequestForAssetFromImageAtFileURL 優化效能
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved