如何在编辑时将图像叠加添加到UIImagePickerControllerSourceTypePhotoLibrary?

Gam*_*Dev 2 iphone uiimagepickercontroller ios

我已经尝试到处寻找答案,但找不到任何有用的信息.

基本上,我希望用户从相册中选择一张图片,然后让应用程序以编辑/裁剪模式显示图片.

在这个编辑屏幕上,我想显示一个覆盖屏幕供用户用来对齐他的图像.

然后,他单击保存按钮,通过合并图像将已编辑的图片与覆盖图像一起保存.

我唯一无法找到的方法是在编辑屏幕中添加叠加图像!

我可以很容易地做到这一点:

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]; 
}
Run Code Online (Sandbox Code Playgroud)

并且我的保存到相册方法:

// 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];
}
Run Code Online (Sandbox Code Playgroud)

Dee*_*olu 6

你可以成为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];
    }
}
Run Code Online (Sandbox Code Playgroud)