在iOS中从图库设置图像

时间:2018-03-27 06:59:18

标签: ios objective-c iphone

我从图库中选择一个图像并在UIImageView上显示,但当我单击后退按钮并再次打开图像视图控制器时图像为空。

退出后我该怎么做才能在UIImageView上保留相同的图像?

我使用过这段代码:

- (void)viewDidLoad {
    NSString *myGrrabedImage1=@"myGrrabedImage1.png";
    NSArray *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectory1=[path objectAtIndex:0];
    NSString *fullPathToFile1=[documentDirectory1 stringByAppendingPathComponent:myGrrabedImage1];
    NSData *data=[NSData dataWithContentsOfFile:fullPathToFile1];
    [[self teacherImg]setImage:[UIImage imageWithData:data]];
    [data writeToFile:fullPathToFile1 atomically:YES];
}
- (IBAction)selectImg:(id)sender {

    pickerController = [[UIImagePickerController alloc]init];
    pickerController.delegate = self;

    [self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];


    UIImage * img = [info valueForKey:UIImagePickerControllerEditedImage];

    teacherImg.image = img;

    [self presentViewController:pickerController animated:YES completion:nil];

}


- (void) imagePickerController:(UIImagePickerController *)picker
         didFinishPickingImage:(UIImage *)image

                   editingInfo:(NSDictionary *)editingInfo
{


        NSData *data=UIImagePNGRepresentation(teacherImg.image);
        NSString *myGrrabedImage1=@"myGrrabedImage1.png";
        NSArray *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentDirectory1=[path objectAtIndex:0];
        NSString *fullPathToFile=[documentDirectory1 stringByAppendingPathComponent:myGrrabedImage1];
        [data writeToFile:fullPathToFile atomically:YES];


        imagePicker.allowsEditing = YES;
        imagePicker.delegate = self;


        [[self teacherImg]setImage:image];


    [self dismissViewControllerAnimated:YES completion:nil];

}

3 个答案:

答案 0 :(得分:1)

viewDidLoad()方法中,您需要从doc加载图片。 DIR。

NSString *myGrrabedImage1 = @"myGrrabedImage1.png";
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory1 = [path objectAtIndex:0];
NSString *fullPathToFile = [documentDirectory1 stringByAppendingPathComponent:myGrrabedImage1];

方法1:

NSData *imgData = [NSData dataWithContentsOfFile: fullPathToFile];
UIImage *thumbNail = [[UIImage alloc] initWithData:imgData];

方法2:

UIIMage *image = [UIImage imageWithContentsOfFile: fullPathToFile];
[imgView setImage: image];

答案 1 :(得分:0)

您应该阅读图片数据并使用ImageView方法设置viewWillAppear图片。

xib / storyboard

加载视图后,

viewDidLoad只被调用一次

答案 2 :(得分:0)

试试这种方式;

 - (void)viewDidLoad {
       NSString *myGrrabedImage1 = @"myGrrabedImage1.png";
       NSArray *path = 
       NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
       NSString *documentDirectory1 = [path objectAtIndex:0];
       NSString *pathFile = [documentDirectory1 stringByAppendingPathComponent:myGrrabedImage1];

       UIIMage *image = [UIImage imageWithContentsOfFile: pathFile];
      [teacherImg setImage: image];

 }

 - (IBAction)selectImg:(id)sender {

        pickerController = [[UIImagePickerController alloc]init];
        pickerController.delegate = self;

        [self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];

        [self presentViewController:pickerController animated:YES completion:nil];        
  }        

 - (void) imagePickerController:(UIImagePickerController *)picker
             didFinishPickingImage:(UIImage *)image
                       editingInfo:(NSDictionary *)editingInfo 
 {
        UIImage * img = [info   valueForKey:UIImagePickerControllerEditedImage];

        teacherImg.image = img;

        NSData *data=UIImagePNGRepresentation(teacherImg.image);
        NSString *myGrrabedImage1=@"myGrrabedImage1.png";
        NSArray *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentDirectory1=[path objectAtIndex:0];
        NSString *fullPathToFile=[documentDirectory1 stringByAppendingPathComponent:myGrrabedImage1];
        [data writeToFile:fullPathToFile atomically:YES];

        [[self teacherImg]setImage:image];

        [self dismissViewControllerAnimated:YES completion:nil];        
   }