通过从FilePath获取图像将图像加载到ImageView中

时间:2016-11-12 16:20:12

标签: ios objective-c

- (IBAction)chooseImgBtnClick:(id)sender {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentViewController:picker animated:YES completion:NULL];
}


-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
    _image=[info objectForKey:UIImagePickerControllerOriginalImage];
    [_vehicleImageView setImage:_image];
    [self dismissViewControllerAnimated:YES completion:NULL];_vehicleImageView.image= [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    NSData *webData = UIImagePNGRepresentation(_vehicleImageView.image);
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *localFilePath = [documentsDirectory stringByAppendingPathComponent:@"png"];
    [webData writeToFile:localFilePath atomically:YES];
    NSLog(@"localFilePath.%@",localFilePath);
    _filePath=localFilePath;
}

使用上面的代码,我从库中选择一张照片并在UIImageView中设置照片,并尝试将路径转换为名为localFilePath的字符串。我将路径分配给_filepath。

现在我编写了一个函数来从文件路径中获取图像,并在单击另一个按钮时将图像加载到另一个UIImageView中。 但是图像没有被加载。请指教

以下是该功能。

- (IBAction)loadSecondView:(id)sender {
    NSData *pngData = [NSData dataWithContentsOfFile:_filePath];
    UIImage *image = [UIImage imageWithData:pngData];
    [_secondImageView setImage:image];

} 

2 个答案:

答案 0 :(得分:0)

iOS,让更接近让用户想到&#34;文件&#34;和&#34;目录&#34;,并没有完全启用它。我想最终你有几个选择可供你使用。我将按照可维护性的降序列出它们:

  • (1)按原样使用操作系统&#34;&#34; - 相机,相机胶卷,照片库。这可能需要对您正在做的事情进行一些重构,但它也是&#34; iOS方式&#34;。

  • (2)使用iCloud Drive and the Document Picker。这个链接是一个高级别的解释。使用此功能可以获得更多的#Apple;&#34;,但您现在限制用户将内容存储在iCloud中。

  • (3)使用名为Document Provider的应用扩展程序。我从来没有使用过这个(但是),但我相信这会在“云”和“#34;并且让您能够读取/写入Dropbox等。提醒一句:我在应用程序中使用了照片编辑扩展程序,并且有很多&#34;陷阱&#34;你必须忍受。扩展程序在UI方面比应用程序更受限制。

  • (4)我不知道这是否有效,但如果你真的被卡住,也许你可以使用某种形式的&#34;深度链接&#34;让您的应用程序成为打开某些图像的默认应用程序。虽然这是一个很长的镜头 - 我真的认为它不会起作用。

答案 1 :(得分:0)

我确实将图片名称保存到属性中。之后我使用下面的代码从特定路径中取回图像并放入ImageView。

-(UIImage*) getImage:(NSString *) imageName{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* path = [documentsDirectory stringByAppendingPathComponent:
                      imageName ];
    UIImage* image = [UIImage imageWithContentsOfFile:path];
    NSLog(@"%@",image);
    return image;

}