2010-11-16 15 views
7

Estoy creando una aplicación para iPad que tiene varias imágenes (UIImageViews) en una vista de desplazamiento horizontal. Quiero permitir que el usuario pueda guardar las imágenes en su Biblioteca de fotos cuando toque una de las UIImageView s. Me gusta la forma en que Safari maneja este asunto: simplemente mantén presionado hasta que aparezca un menú emergente y luego haz clic en guardar imagen. Sé que está el "UIImageWriteToSavedPhotosAlbum". Pero soy un novato en el desarrollo de iOS y no estoy muy seguro de a dónde ir y dónde ubicarlo (es decir, cómo detectar qué imagen fue interceptada).Guardar imagen en UIImageView para iPad Photos Library

De lo que he encontrado, he visto personas que usan UIImage en lugar de UIImageView. ¿Debo convertir mi vista a UIImage? ¿Si es así, cómo? ¿Cómo puedo detectar cuándo el usuario toca las imágenes y cuál fue el UIImageView que se tocó? Si pudieras señalarme en la dirección correcta, y tal vez algunos ejemplos, lo agradecería enormemente.

Respuesta

32

Usted puede utilizar la propiedad image de un UIImageView para obtener la imagen actual:

UIImage* imageToSave = [imageView image]; // alternatively, imageView.image 

// Save it to the camera roll/saved photo album 
UIImageWriteToSavedPhotosAlbum(imageToSave, nil, nil, nil); 
+0

Gracias por la respuesta rápida. Pero, ¿cómo puedo detectar qué UIImageView fue aprovechado? ¿Hay alguna manera de hacer aparecer una ventana emergente cuando el usuario toca la imagen que permite al usuario seleccionar un botón para guardar? Y cuando se presione el botón "Guardar", pondría su extracto en ese IBAction, ¿verdad? – Brian

+0

Puede cablear el evento 'retocar adentro' en su UIImageView en Interface Builder a un método de acción que implemente (esto también se puede hacer mediante programación), como '- (void) touchedImageView: (id) sender', en cuyo caso 'remitente' sería la vista que se tocó. Desde allí, podría presentar un menú (como una 'UIActionSheet') para decidir si desea guardar la imagen. – bosmacs

+0

Tengo el código desactivado, pero no veo ninguno de los eventos 'táctiles' en Interface Builder. Con uno de mis UIImageViews seleccionado, voy a la ventana Inspector, luego a la pestaña Conexiones, ¿verdad? Veo los eventos táctiles cuando se selecciona un botón pero no un UIImageView. ¿Debo hacer todos estos UIImageViews en botones? – Brian

3

En lo que respecta a la parte de su pregunta preguntando cómo detectar qué UIImageView fue aprovechado, puede utilizar código como el siguiente :

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

[super touchesEnded:touches withEvent:event]; 
UITouch *touch = [touches anyObject]; 
CGPoint touchEndpoint = [touch locationInView:self.view]; 
CGPoint imageEndpoint = [touch locationInView:imageview]; 
if(CGRectContainsPoint([imageview frame], touchEndpoint)) 
{ 
do here any thing after touch the event. 

    } 
} 
4
- (IBAction)TakePicture:(id)sender { 


    // Create image picker controller 
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 

    // Set source to the camera 
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 


    // Delegate is self 
    imagePicker.delegate = self; 


    OverlayView *overlay = [[OverlayView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGTH)]; 

    // imagePicker.cameraViewTransform = CGAffineTransformScale(imagePicker.cameraViewTransform, CAMERA_TRANSFORM_X, CAMERA_TRANSFORM_Y); 

    // Insert the overlay: 
    imagePicker.cameraOverlayView = overlay; 

    // Allow editing of image ? 
    imagePicker.allowsImageEditing = YES; 
    [imagePicker setCameraDevice: 
    UIImagePickerControllerCameraDeviceFront]; 
    [imagePicker setAllowsEditing:YES]; 
    imagePicker.showsCameraControls=YES; 
    imagePicker.navigationBarHidden=YES; 
    imagePicker.toolbarHidden=YES; 
    imagePicker.wantsFullScreenLayout=YES; 


    self.library = [[ALAssetsLibrary alloc] init]; 


    // Show image picker 
    [self presentModalViewController:imagePicker animated:YES]; 
} 





- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    // Access the uncropped image from info dictionary 
    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 




    // Save image to album 
    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 


    // save image to custom album 
    [self.library saveImage:image toAlbum:@"custom name" withCompletionBlock:^(NSError *error) { 
     if (error!=nil) { 
      NSLog(@"Big error: %@", [error description]); 
     } 
    }]; 

    [picker dismissModalViewControllerAnimated:NO]; 


} 



- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo 
{ 
    UIAlertView *alert; 

    // Unable to save the image 
    if (error) 
     alert = [[UIAlertView alloc] initWithTitle:@"Error" 
              message:@"Unable to save image to Photo Album." 
              delegate:self cancelButtonTitle:@"Ok" 
           otherButtonTitles:nil]; 
    else // All is well 
     alert = [[UIAlertView alloc] initWithTitle:@"Success" 
              message:@"Image saved to Photo Album." 
              delegate:self cancelButtonTitle:@"Ok" 
           otherButtonTitles:nil]; 


    [alert show]; 
} 



- (void) alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    // After saving iamge, dismiss camera 
    [self dismissModalViewControllerAnimated:YES]; 
} 
1

En Swift:

// Save it to the camera roll/saved photo album 
    // UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, nil, nil, nil) or 
    UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, self, "image:didFinishSavingWithError:contextInfo:", nil) 

    func image(image: UIImage!, didFinishSavingWithError error: NSError!, contextInfo: AnyObject!) { 
      if (error != nil) { 
       // Something wrong happened. 
      } else { 
       // Everything is alright. 
      } 
    } 
Cuestiones relacionadas