0

我想出现在用“ViewController”拍摄的“PreviewViewController”图片的“UIImageView”中。

但是我不能。

请告诉我

视图控制器.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;
4

1 回答 1

0

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

如果它是在 .xib 中创建的,请确保已连接出口。


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


你需要修改 UIViewController 生命周期来理解为什么你的 p.imagePreview 是nil.
我建议您将生命周期方法NSLog()的每个方法放在开头。UIViewController(所有 viewDid...、viewWill...、)以清楚地了解生命周期并了解系统何时调用事物。

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

于 2012-12-07T03:11:16.023 回答