UIImagePickerController图像,显示到另一个类

时间:2012-12-07 03:05:27

标签: iphone objective-c ios xcode

我希望出现在使用“ViewController”拍摄的“PreviewViewController”照片的“UIImageView”中。

但我不能。

请告诉我

ViewController.m

-(void)imagePickerController:(UIImagePickerController *)pic  didFinishPickingMediaWithInfo:(NSDictionary *)info
{
  [imagePicker dismissViewControllerAnimated:YES completion:NO];

  UIImage *originalImage;
  originalImage = [info objectForKey:UIImagePickerControllerOriginalImage];

CGSize  size = { 100, 200 };
UIGraphicsBeginImageContext(size);

CGRect  rect;
rect.origin = CGPointZero;
rect.size = size;
[originalImage drawInRect:rect];
UIImage*    shrinkedImage;
shrinkedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

CGRect r = CGRectMake(0, 60, 100, 100);
CGImageRef cgImage = CGImageCreateWithImageInRect(shrinkedImage.CGImage, r);
iconImage = [UIImage imageWithCGImage:cgImage];
UIImageWriteToSavedPhotosAlbum (iconImage, nil, nil , nil);

// This problem!!!
PreviewViewController *p = [[PreviewViewController alloc] init];
p.imagePreview.image = iconImage;
[self presentViewController:p animated:YES completion:NO];
}

PreviewViewController.h

@property (nonatomic) UIImageView *imagePreview;

1 个答案:

答案 0 :(得分:1)

您是否创建了可以接收iconImage的UIImageView? 乍一看,当您尝试为其分配图像时,我会说p.imagePreview == nil

如果是在.xib中创建的,请确保已连接插座。


从您的评论中我了解到您正在viewDidLoad中创建UIImageView,在要求视图进入屏幕之前通常不会调用它(有很多方法可以强制它更快地附加)。 /> 这意味着当您在其中分配图像时p.imagePreview可能是nil 您是否尝试将breakpointNSLog(@"%@", p.imagePreview);设置为查看实例是否有效? 如果那时nil我可以考虑至少两种方法来解决这个问题。


您需要修改UIViewController生命周期,以了解p.imagePreview为nil的原因。 我建议您将NSLog()放在UIViewController生命周期方法的每个方法的开头。 (所有viewDid ...,viewWill ...,)可以清楚地了解生命周期,并了解系统何时接到电话。

至于您的问题,您可以定义@property (nonatomic, strong) UIImage *anImage并将要在图像视图中使用的图像存储在那里,并在viewDidLoad中初始化UIImageView时使用该图像。
由于您没有使用.xib,因此您还应考虑覆盖loadView