如何将图像从uiimagepickercontroller传递到另一个场景的uiimageview中
如何保存UIImagePickerController
摄像头图像,以便发送到CreateViewController
场景的UIImageView
?
HomeViewController
(场景1)有一个按钮,可以加载UIImagePickerController
并返回来自摄像头的图像。 CreateViewController
(场景2)有一个空的UIImageView
。
HomeViewController.h
#import "CreateViewController.h" @interface HomeViewController : UIViewController @property (strong, nonatomic) UIImagePickerController *imagePicker; @property(nonatomic, retain) UIImage *myImage; - (IBAction)cameraImage:(id)sender;
HomeViewController.m
@implementation HomeViewController @synthesize imagePicker, myImage; -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ( [segue.identifier isEqualToString:@"create"]) { CreateViewController *cvc = [segue destinationViewController]; UIImage *image = myImage; cvc.myImage = image; } } //Camera button action - (IBAction)cameraImage:(id)sender{ //UIImagePickerController space in memory imagePicker = [[UIImagePickerController alloc]init]; //Set the delegate imagePicker.delegate = self; //Set the sourceType imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; //Show Image Picker UI [self presentViewController:imagePicker animated:YES completion:^{}]; } -(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo: (NSDictionary *)info { self.myImage = [info objectForKey:UIImagePickerControllerOriginalImage]; [self dismissViewControllerAnimated:YES completion:^{}]; [self performSegueWithIdentifier:@"create" sender:self]; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { [self dismissViewControllerAnimated:YES completion:^{}]; }
CreateViewController.h
@property (strong, nonatomic) IBOutlet UIImageView *bgImage; @property(nonatomic, retain) UIImage *myImage;
CreateViewController.m
@implementation CreateViewController @synthesize bgImage, myImage; - (void)viewDidLoad { [super viewDidLoad]; UIImage *image = myImage; [bgImage setImage:image]; }
在此下载示例代码; http://code-blind.com/ios6-camera-picture-to-another-scenes-uiimageview/
如果以编程方式实例化控制器,则不必使用segue。
实现这一目标的最简单方法就是这样
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [picker dismissViewControllerAnimated:YES completion:nil]; UIImage * pickedImage = [info objectForKey:UIImagePickerControllerOriginalImage]; DisplayViewController * controller = [DisplayViewController new]; controller.imageView.image = pickedImage; [self.navigationController pushViewController:controller animated:YES]; }
如果你想使用segue,你需要手动调用它
[self performSegueWithIdentifier:@"your-segue-name" sender:self];
然后你可以在HomeViewController中使用一个ivar来存储pickedImage
并将它传递给你的destinationViewController
。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { DisplayViewController * controller = (DisplayViewController *)segue.destinationViewController; controller.imageView.image = _pickedImage; }
其中_pickedImage
是您在拾取图像后存储图像的ivar。
在你的第一个视图
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { CreateViewController* sI = [self.storyboard instantiateViewControllerWithIdentifier:@"XXXXX"]; sI.myImage = image; }
XXXXX是视图的标识符。
首先,您必须确保调用了您的委托方法并且您拥有该图像。 接下来,将图像存储到属性:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { self.takenImage = image; // assuming you have declared @property(nonatomic, strong) UIImage *takenImage; [picker dismissViewControllerAnimated:YES completion:^{ [self performSegueWithIdentifier:@"my-segue" sender:self]; }]; }
在那之后,这个方法被称为:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // you need to set the picked image to the controller: DisplayViewController *controller; // get the controller controller.image = self.takenImage; }
在这段代码中:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage]; if( i ==1) { [self dismissViewControllerAnimated:YES completion:^ { Second_ViewController*secondview=[[UIStoryboard storyboardWithName:@"Main" bundle:nil]instantiateViewControllerWithIdentifier:@"Second_ViewController"]; secondview.bb_image=image; [[NSUserDefaults standardUserDefaults ]setInteger:0 forKey:@"123"]; [[self navigationController] pushViewController:secondview animated:YES]; }]; }