我希望出现在使用“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;
答案 0 :(得分:1)
您是否创建了可以接收iconImage的UIImageView?
乍一看,当您尝试为其分配图像时,我会说p.imagePreview == nil
。
如果是在.xib中创建的,请确保已连接插座。
从您的评论中我了解到您正在viewDidLoad
中创建UIImageView,在要求视图进入屏幕之前通常不会调用它(有很多方法可以强制它更快地附加)。 />
这意味着当您在其中分配图像时p.imagePreview
可能是nil
您是否尝试将breakpoint
或NSLog(@"%@", p.imagePreview);
设置为查看实例是否有效?
如果那时nil
我可以考虑至少两种方法来解决这个问题。
您需要修改UIViewController生命周期,以了解p.imagePreview为nil
的原因。
我建议您将NSLog()
放在UIViewController
生命周期方法的每个方法的开头。 (所有viewDid ...,viewWill ...,)可以清楚地了解生命周期,并了解系统何时接到电话。
至于您的问题,您可以定义@property (nonatomic, strong) UIImage *anImage
并将要在图像视图中使用的图像存储在那里,并在viewDidLoad
中初始化UIImageView时使用该图像。
由于您没有使用.xib,因此您还应考虑覆盖loadView
。