2010-11-16 6 views
7

Ich erstelle eine iPad App mit mehreren Bildern (UIImageViews) in einem horizontalen Scrollview. Ich möchte dem Benutzer ermöglichen, die Bilder in ihrer Fotobibliothek zu speichern, wenn sie auf eines der UIImageView s tippen. Ich mag die Art, wie Safari mit dieser Angelegenheit umgeht: Sie tippen und halten Sie einfach, bis ein Popup-Menü erscheint und klicken Sie dann auf "Bild speichern". Ich weiß, dass es die "UIImageWriteToSavedPhotosAlbum" gibt. Aber ich bin ein Neuling für die Entwicklung von iOS und ich bin mir nicht sicher, wohin ich damit gehen soll und wo ich es hinstellen soll (d. H. Wie man erkennt, welches Bild angetippt wurde).Bild in UIImageView auf iPad speichern Fotos Bibliothek

Von dem, was ich gefunden habe, habe ich Leute gesehen UIImage statt UIImageView verwenden. Muss ich meine Ansicht in UIImage konvertieren? Wenn das so ist, wie? Wie erkenne ich, wenn der Benutzer auf die Bilder tippt und welche Nummer UIImageView angetippt wurde? Wenn Sie mich in die richtige Richtung weisen könnten, und vielleicht einige Beispiele, würde ich es sehr schätzen.

Antwort

32

können Sie verwenden, um die image Eigenschaft eines UIImageView das aktuelle Bild zu erhalten:

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

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

Danke für die schnelle Antwort. Aber wie erkenne ich, welche UIImageView angezapft wurde? Gibt es eine Möglichkeit, ein Popup-Fenster aufzurufen, wenn der Benutzer auf das Bild tippt, mit dem der Benutzer eine Schaltfläche zum Speichern auswählen kann? Und wenn der "Speichern" -Button gedrückt wird, würde ich Ihre Aussage in diese IBAction schreiben, richtig? – Brian

+0

Sie können das Ereignis 'touch up inside' in Ihrem UIImageView in Interface Builder mit einer Aktionsmethode verbinden, die Sie implementieren (dies kann auch programmgesteuert erfolgen), z. B. '- (void) touchedImageView: (id) sender' 'sender' wäre die Ansicht, die berührt wurde. Von dort aus können Sie ein Menü (z. B. ein "UIActionSheet") anzeigen, um zu entscheiden, ob das Bild gespeichert werden soll. – bosmacs

+0

Ich habe den Code deaktiviert, aber ich sehe keine der 'Touch'-Ereignisse im Interface Builder. Wenn eines meiner UIImageViews ausgewählt ist, gehe ich zum Inspector-Fenster und dann zum Connections-Tab, oder? Ich sehe die Berührungsereignisse, wenn eine Schaltfläche ausgewählt ist, aber keine UIImageView. Sollte ich all diese UIImageViews nur in Buttons machen? – Brian

3

In Bezug auf den Teil Ihrer Frage zu fragen, wie zu erkennen, welche UIImageView abgehört wurde, Sie Code wie den folgenden verwenden können :

-(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

In 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. 
      } 
    }