2010-11-16 11 views
7

Tworzę aplikację na iPada z kilkoma zdjęciami (UIImageViews) w poziomym przewijanym wierszu. Chcę umożliwić użytkownikowi zapisywanie obrazów w ich bibliotece zdjęć po dotknięciu jednego z UIImageView s. Podoba mi się sposób, w jaki Safari sobie z tym poradzi: wystarczy dotknąć i przytrzymać, aż pojawi się wyskakujące menu, a następnie kliknąć Zapisz obraz. Wiem, że jest "UIImageWriteToSavedPhotosAlbum". Ale jestem początkującym deweloperem iOS i nie jestem zbyt pewny, gdzie z tym pójść i gdzie go umieścić (tj. Jak wykryć, który obraz został podsłuchany).Zapisz obraz w UIImageView na iPadzie Zdjęcia Biblioteka

Z tego, co znalazłem, widziałem ludzi używających UIImage zamiast UIImageView. Czy muszę przekonwertować mój widok na UIImage? Jeśli tak to jak? Jak mogę wykryć, kiedy użytkownik dotyka obrazów i który został dotknięty? Gdybyś mógł wskazać mi właściwy kierunek, a może kilka przykładów, bardzo bym to docenił.

Odpowiedz

32

Można użyć właściwość UIImageViewimage aby uzyskać aktualny obraz:

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

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

Dzięki za szybką odpowiedź. Ale jak wykryć, który UIImageView został dotknięty? Czy istnieje sposób, aby pop-up pojawił się, gdy użytkownik dotknie obrazu, który pozwala użytkownikowi wybrać przycisk, aby zapisać? A kiedy zostanie naciśnięty przycisk "Zapisz", wstawiłbym twoje oświadczenie do IBAction, prawda? – Brian

+0

Moglibyście podłączyć zdarzenie "touch up inside" na swoim UIImageView w Interface Builder do metody działania, którą implementujecie (można to również zrobić programowo), na przykład '- (void) touchedImageView: (id) sender', w którym to przypadku 'nadawca' byłby widokiem, który został dotknięty. Stamtąd można wyświetlić menu (takie jak "UIActionSheet"), aby zdecydować, czy zapisać obraz. – bosmacs

+0

Mam kod w dół, ale nie widzę żadnych zdarzeń "dotykowych" w Konstruktorze interfejsu. Po wybraniu jednego z moich widoków UIImage, przechodzę do okna Inspektora, a następnie zakładki Połączenia, prawda? Widzę zdarzenia dotykowe, gdy wybrany jest przycisk, ale nie jest to UIImageView. Czy powinienem po prostu wprowadzić wszystkie te UIImageViews w przyciski? – Brian

3

W odniesieniu do części pytania pytaniem, jak wykryć który UIImageView był na podsłuchu, można użyć kodu jak poniżej :

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

W 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. 
      } 
    } 
Powiązane problemy