0

カメラで撮影した写真を別の UIViewController に表示したいと思います。このコード スニペットを試してみましたが、写真が 2 番目のビューに表示されないため、何か間違ったことをしたと思います。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    editedImage = (UIImage *) [info objectForKey:
                               UIImagePickerControllerEditedImage];
    originalImage = (UIImage *) [info objectForKey:
                                 UIImagePickerControllerOriginalImage];
    imageToSave = (editedImage!=nil ? editedImage : originalImage);


    // Check if the image was captured from the camera
    if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
        // Save the image to the camera roll
        UIImageWriteToSavedPhotosAlbum(imageToSave, nil, nil, nil);
    }

    NSString *docspath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *filepathJPG = [docspath stringByAppendingPathComponent:@"imagefile.jpg"];

    NSData *data = UIImageJPEGRepresentation(imageToSave, 0.8);
    BOOL result = [data writeToFile:filepathJPG atomically:YES];
    NSLog(@"Saved to %@? %@", filepathJPG, (result? @"YES": @"NO") );

    [picker dismissViewControllerAnimated:YES completion:nil];

    mainViewController *main = [[mainViewController alloc]init];
    [self.navigationController pushViewController:main animated:YES];
    main.myImag.image = imageToSave;
}

アップデート:

2 番目のビューにストーリーボードを使用するように変更します。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([[segue identifier] isEqualToString:@"idmain"]){
        mainViewController *main = (mainViewController *)[segue destinationViewController];
        main.myImag.image = imageToSave;
    }
}

そして、mainViewController で:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    NSString *docspath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *filepathJPG = [docspath stringByAppendingPathComponent:@"imagefile.jpg"];

    UIImage *img = [UIImage imageWithContentsOfFile: filepathJPG];
    if (img != nil) {
        // assign the image to the imageview,
        myImag.image = img;
    }
    else {
        NSLog(@"Image hasn't been created");
    }
}

しかし、選択を押しても、2番目のビューコントローラーは表示されません。

4

2 に答える 2

1

ドキュメントディレクトリに写真を保存しているので、ドキュメントディレクトリからアクセスする必要があります

試す

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString* path = [documentsDirectory stringByAppendingPathComponent:imagefile.jpg];

    UIImage* image = [UIImage imageWithContentsOfFile:path];

このコードを使用すると、ドキュメント ディレクトリから画像を取得できます。

于 2013-11-09T08:45:30.370 に答える
0

...あなたのimageToSaveUIImageオブジェクトが(そもそも)有効であると仮定すると、


svc.myImag.image = imageToSave;
これを行う代わりに

svc.currentImage = imageToSave;
//where currentImage is a UIImage synthesized property in mainViewController class

次に、mainViewController クラスの-viewDidLoadまたはで、UIImageView オブジェクトに 設定します。-viewWillAppear
currentImagemyImag

単に:

//mainViewController
- (void)viewWillAppear {
    ...
    myImag.image = currentImage;
}

理由??...の-initWithNibName:bundle:メソッド
の iOS ドキュメントには、次のように記載されています。UIViewController

… 指定した nib ファイルはすぐにはロードされません。ビューコントローラーのビューに初めてアクセスしたときに読み込まれます。nib ファイルのロード後に追加の初期化を実行する場合は、viewDidLoadメソッドをオーバーライドしてそこでタスクを実行します。…</p>


同様の参照: プロパティの設定が早すぎると、UIImageView が画像を表示しない

于 2013-11-09T09:29:23.920 に答える