¿Cómo puedo guardar una imagen en el carrete de la cámara?

Soy nuevo en Xcode (usando 4.3) y no estoy seguro de cómo guardar una imagen en el carrete de la cámara del dispositivo. Todo lo que he hecho hasta ahora es configurar un IBAction para el botón para guardar la imagen. ¿Qué método o función de biblioteca puedo usar para guardar una imagen en el rollo de la cámara del usuario?

Utiliza la función UIImageWriteToSavedPhotosAlbum() .

 //Let's say the image you want to save is in a UIImage called "imageToBeSaved" UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil); 

Editar:

 //ViewController.m - (IBAction)onClickSavePhoto:(id)sender{ UIImageWriteToSavedPhotosAlbum(imageToBeSaved, nil, nil, nil); } 

Aquí hay una respuesta para iOS8 + usando el marco de Fotos.

C objective:

 #import  UIImage *snapshot = self.myImageView.image; [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ PHAssetChangeRequest *changeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:snapshot]; changeRequest.creationDate = [NSDate date]; } completionHandler:^(BOOL success, NSError *error) { if (success) { NSLog(@"successfully saved"); } else { NSLog(@"error saving to photos: %@", error); } }]; 

Rápido:

 // Swift 4.0 import Photos let snapshot: UIImage = someImage PHPhotoLibrary.shared().performChanges({ PHAssetChangeRequest.creationRequestForAsset(from: snapshot) }, completionHandler: { success, error in if success { // Saved successfully! } else if let error = error { // Save photo failed with error } else { // Save photo failed with no error } }) 

Aquí hay un enlace a la documentación de Apple.

No olvide agregar la clave / valor apropiado a su info.plist para solicitar permiso para acceder a la biblioteca de fotos:

 NSCameraUsageDescription Enable camera access to take photos. NSPhotoLibraryUsageDescription Enable photo library access to select a photo from your library. NSPhotoLibraryAddUsageDescription Enable photo library access to save images to your photo library directly from the app. 

Como referencia, puede guardar videos de manera similar:

 UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil); 

Es posible que desee guardar un video para subirlo a Instagram, por ejemplo:

 // Save video to camera roll; we can share to Instagram from there. -(void)didTapShareToInstagram:(id)sender { UISaveVideoAtPathToSavedPhotosAlbum(self.videoPath, self, @selector(video:didFinishSavingWithError:contextInfo:), (void*)CFBridgingRetain(@{@"caption" : caption})); } - (void) video: (NSString *) videoPath didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfoPtr { NSDictionary *contextInfo = CFBridgingRelease(contextInfoPtr); NSString *caption = contextInfo[@"caption"]; NSString *escapedString = [videoPath stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]; // urlencodedString NSString *escapedCaption = [caption stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]; // urlencodedString NSURL *instagramURL = [NSURL URLWithString:[NSString stringWithFormat:@"instagram://library?AssetPath=%@&InstagramCaption=%@", escapedString, escapedCaption]]; [[UIApplication sharedApplication] openURL:instagramURL]; }