UIImage 返回零
Posted
技术标签:
【中文标题】UIImage 返回零【英文标题】:UIImage Returning nil 【发布时间】:2013-11-26 10:52:47 【问题描述】:我正在将数据从一个控制器传递到另一个控制器。
TemplateController
是发送数据的那个,如下所示:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
PreviewController *destViewController = [[PreviewController alloc]init];
destViewController.passFrameLabel = [self.frameImages[indexPath.section] objectAtIndex:indexPath.row];
[self.collectionView deselectItemAtIndexPath:indexPath animated:NO];
[destViewController loadFrame];
[self dismissViewControllerAnimated:YES completion:nil];
PreviewController
中的 loadFrame
方法如下所示:
UIImageView *frameImageView = [[UIImageView alloc] init];
[self.view addSubview:frameImageView];
self.frameImageView.image = [UIImage imageNamed:self.passFrameLabel];
调试后 self.passFrameLabel 包含正确的值,但 self.frameImageView.image
返回 nil
。我错过了什么?
【问题讨论】:
self.passFrameLabel
的值是多少?您确定图像在您的捆绑包中吗?而且写法正确(注意大小写)?
frameImageView的frame你设置了吗?
@KIDdAe 是的,我的图片在我的捆绑包中。 self.passFrameLable 的值是文件名,一个在它的类(TemplateController)中实际正确显示的png文件
@visualication 你是什么意思? frameImageView 在头文件中声明为 UIImageView 属性(保留,非原子)。
模拟器中是否显示??
【参考方案1】:
当您的类也具有 frameImageView
属性时,您似乎正在创建 frameImageView
本地对象。您将 UIImageView
的本地对象添加为子视图,但将 image
分配给属性(似乎没有初始化)。
你应该修改你的代码,
//frameImageView should be a strong property
_frameImageView = [[UIImageView alloc] init];
self.frameImageView.frame = CGRectMake(10,10,50,50); //Add suitable frame
//Now assign image
self.frameImageView.image = [UIImage imageNamed:self.passFrameLabel];
//Add this property as subview
[self.view addSubview:self.frameImageView];
试试看。
【讨论】:
@Amar,看起来非常接近。 self.frameImageView.view 也不返回 UIImage!但是当我使用手势识别器时,这个gestureRecognizer被“self.view”调用并且UIImage没有被显示但现在看起来很接近。 @Edu 对不起,但不太明白你在说什么。您的图像视图现在显示了吗?如果不能,您可以记录self.passFrameLabel
并尝试使用initWithContentsOfFile:
而不是imageNamed:
API 分配和初始化UIImage
。
@Amar 它不显示。 self.passFrameLable 返回 png 文件的全名,self.frameImageView.image 返回 UIImage。如果我使用 initWithContentsOfFile 我会得到同样的结果。一切都正确记录,但图像不显示。我在同一个视图控制器中有另一个 UIImage,这可能是个问题吗?
@Edu 你能检查一下你的self.frameImageView
图像视图是否隐藏在另一个视图后面/重叠了吗?这可能是没有显示的原因。
@Amar 我有另一个图像视图,但我将两个图像视图放在不同的坐标上,这样它们就不会重叠。【参考方案2】:
首先 - 该文件名的图像是否存在于项目中,是否已检查以将其复制到该目标包中?
【讨论】:
是的。图像存在。实际上它显示在 TemplateController 中。 嗯,在这种情况下,只需检查 self.passFrameLabel 是否返回您预期的图像名称,除此之外我可能没有想法:(以上是关于UIImage 返回零的主要内容,如果未能解决你的问题,请参考以下文章
对 UIImage 进行像素化会返回具有不同大小的 UIImage