2012-06-21 14 views
111

Soy nuevo en Xcode (usando 4.3) y no estoy seguro de cómo guardar una imagen en el rollo 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?¿Cómo puedo guardar una imagen en el carrete de la cámara?

Respuesta

212

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); 
} 
+0

Digamos que tengo '- (IBAcción) onClickSavePhoto: (id) remitente;' en mi archivo ViewController.h, usando lo que tienes arriba, ¿qué debería colocar exactamente en el archivo ViewController.m? ¡Muchas gracias de nuevo! – user1470914

+1

@ user1470914 Ver mi edición. Además, ¿dónde está consiguiendo que la imagen se guarde en el carrete de la cámara? ¿Ya está en el paquete de la aplicación o el usuario toma una foto y luego la guarda en el carrete de la cámara? – pasawaya

+0

Gracias por su paciencia qegal. No he tenido la oportunidad de volver a tratar este tema hasta ahora. Tu EDIT nos ayudó súper. La imagen está en el paquete de la aplicación. Hay varias imágenes en la aplicación y se pueden ver como miniaturas pequeñas. Cuando se selecciona una miniatura pequeña, se dirige a una nueva vista y se puede ver una versión de pantalla completa. Tengo un botón en la esquina superior derecha del navegador que dice "guardar" y este es el botón que deseo guardar la imagen en el rollo cameral del dispositivo para que se pueda aplicar como fondo de pantalla. Gracias de nuevo por su ayuda y paciencia (no estoy seguro de por qué CasperOne cerró esto). – user1470914

6

Como referencia, puede guardar los vídeos en una manera similar:

UISaveVideoAtPathToSavedPhotosAlbum(videoPath, nil, nil, nil); 

Es posible que desee guardar un video para subir 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]; 
} 
29

Aquí hay una respuesta f o iOS8 usando el marco de Photos.

Objective-C:

#import <Photos/Photos.h> 

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); 
    } 
}]; 

Swift:

// Swift 3.0 
import Photos 

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 
    } 
}) 

He aquí una link a la documentación de Apple.

+0

Cómo obtener la url de la imagen @ricardopereira –

+0

@Mansuu Por favor, eche un vistazo a https://stackoverflow.com/a/37248867/3641812 – ricardopereira

Cuestiones relacionadas