Как добавить наложение изображения в UIImagePickerControllerSourceTypePhotoLibrary при редактировании? - PullRequest
2 голосов
/ 24 мая 2011

Я пытался найти ответ на этот вопрос везде, но не могу найти какую-либо полезную информацию.

По сути, я хочу, чтобы пользователь выбрал изображение из альбома, а затем приложение отобразило изображениев режиме редактирования / обрезки.

На этом экране редактирования я хочу отобразить наложенный экран, который пользователь может использовать для выравнивания своего изображения.

Затем он нажимает кнопку сохранения, которая сохраняет отредактированное изображение вместе с наложенным изображением, простообъединение изображений.

Единственное, что я не могу найти, как это сделать, это добавить наложение изображения на экране редактирования!

Я могу сделать это довольно легко, когда:

imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

Но когда:

imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

Я не могу использовать:

imagePicker.cameraOverlayView = overlayGraphicView;

и это моя проблема.

Также, если я вместо этого добавляю UIimage как подпредставление, то это наложение остается на экране, даже когда пользователь выбирает свое изображение из альбома.Я хочу, чтобы наложение отображалось только после того, как изображение было выбрано для редактирования и до того, как оно было сохранено в альбом после завершения редактирования.

Спасибо за помощь.

Вот этот метод:

- (IBAction)pickPhotoButton:(id)sender {
    NSLog(@"Pick a Current Photo Button Pressed...");

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

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

    // Delegate is self
    imagePicker.delegate = self;

    // Allow editing of image ?
    imagePicker.allowsEditing = YES;

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

и вот мой метод сохранения в альбом:

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

    // Combine image with overlay before saving!!
    image = [self addOverlayToImage:image];

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

    [picker release];
}

Ответы [ 2 ]

6 голосов
/ 24 мая 2011

Вы можете стать UIImagePickerController делегатом объекта и внимательно наблюдать за методами UINavigationControllerDelegate - navigationController:didShowViewController:animated: и navigationController:willShowViewController:animated:. Вы можете знать, когда включается второй контроллер представления, и позже добавить свое наложение в представление контроллера представления. Пример использования показан ниже -

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if ( [navigationController.viewControllers count] == 2 ) {
        overlayView.center = CGPointMake(135, 135);
        overlayView.bounds = CGRectZero;

        [viewController.view addSubview:overlayView];

        [UIView beginAnimations:@"animateTableView" context:nil];
        [UIView setAnimationDuration:0.4];
        [overlayView setFrame:CGRectMake( 50, 50, 220, 220)];
        [UIView commitAnimations];
    }
}
0 голосов
/ 21 сентября 2012

Вы можете использовать следующий настраиваемый метод для добавления оверлеев к Imagepickercontroller

В вашем классе .h файл определения

@property (nonatomic, retain) UIImagePickerController*      m_Pickercontroller;
@property(nonatomic,retain) UIView *cameraOverlayView;


 In yourclassname.m file

-(void)Loadcaptureview
{
   //Allocating Image Picker Controller 
    m_Pickercontroller=[[UIImagePickerController alloc] init ];
    m_Pickercontroller.delegate=self;
    m_Pickercontroller.allowsEditing=YES;
    m_Pickercontroller.sourceType=UIImagePickerControllerSourceTypeCamera;
    m_Pickercontroller.view.frame=CGRectMake(0, 0, 320, 300); 

    UIButton*Clickbutton=[[UIButton alloc] initWithFrame:CGRectMake(50,200, 60, 60)];
    [Clickbutton setImage:[UIImage imageNamed:@"red-circle-button.png"] forState:UIControlStateNormal];
    [Clickbutton addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside];

    image1=[[UIImageView alloc] initWithFrame:CGRectMake(50,400, 60, 60)];
    image1.image=[UIImage imageNamed:@"red-circle-button.png"];

    [m_Pickercontroller.cameraOverlayView addSubview:Clickbutton];
    [m_Pickercontroller.cameraOverlayView addSubview:image1];
    [m_Pickercontroller.cameraOverlayView bringSubviewToFront:image1];

    //Hiding the Camera Control
    m_Pickercontroller.showsCameraControls=NO;

    //Presenting the imagepicker Controller to Present Modal view Controller
    [self.navigationController presentModalViewController:m_Pickercontroller animated:YES];
    }

  // Calling the Function

  - (void)viewDidLoad
  {

   [self Loadcaptureview];

   }
...