Kri*_*dra 22 iphone png jpeg uiimage ios
我正在开发一款iphone应用,目标是iOS 4.0或更高版本.我正在尝试向UIImageView添加图像,图像采用jpeg格式.这就是我到目前为止所做的......
UIImageView *bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 246.0)];
bgImageView.image = [UIImage imageNamed:@"background"];
[self.view addSubview:bgImageView];
[bgImageView release];
Run Code Online (Sandbox Code Playgroud)
我添加了两张图片,
但是当我构建并运行时,一切都运行良好,除了没有背景.我的所有其他小工具都在那里,但是有一个白色背景,图像没有显示.
接下来,我为我的背景创建了两个png图像,将其添加到项目中并运行.这次是我的背景.我很困惑,因为根据文档 jpg图像可以在UIImage的iphone中使用.
我再次尝试使用我的jpg图像并将上面的代码更改为此
UIImageView *bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 246.0)];
bgImageView.image = [UIImage imageNamed:@"background.jpg"]; //added extension
[self.view addSubview:bgImageView];
[bgImageView release];
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,显示背景图像,但未加载2x图像.这表明我的jpg图像很好,并不是罪魁祸首.因此,当我只提供没有扩展名的图像名称时,png文件(包括1x和2x)都加载到各自的设备上,jpg文件根本没有加载.看起来像一个错误(在sdk或文档中).iOS 4在这里度过了美好的一年.为什么没有人注意到它?除了将我的所有图像转换为png之外,还有什么选择吗?
编辑:
那么,两天的问题,零回答.我已经将所有图像转换为png,并且我的项目的那部分已经完成(因为我的项目无法等待......).尽管如此,为了我自己和为了将来面对这一切的每个人,我想更多地了解这个问题.至少有人可以确认这确实是一个苹果虫.我正在开始赏金,以便更多人可以看到这个帖子.
再次编辑
此奖金剩余2天结束.感谢所有回复的人.但让我澄清一件事.我已经说过我已将所有图像转换为png而且我一直在移动.我只是想要一些确认,以imageNamed同样的方式处理jpg和png文件.文档肯定会说(除非Apple将其写入UIImage文档以外的其他地方).如果文档是正确的,那么由于两个可能的原因我的代码失败了
imageNamed.如果这是原因,那么我没有太多的选择,除了提交错误报告,将我的图像更改为png或写一个包装(就像Chandan在他的回答中所说)并继续前进..还有一件事.这篇文章也只是讲述了这个问题.但他不知道背后的原因.所以我并不孤单.
编辑:结束
嗯它是与图像本身有关的东西.我用Google搜索并下载了一些示例jpeg图像并使用它进行播放.其中一些显示正确,一些没有.由于限制时间到了,我正在向PengOne提供限制,他试图重现错误并成功加载jpg图像而没有扩展,让我使用更多图像.感谢所有试图提供帮助的人.
Pen*_*One 11
根据UIImage课程参考:
讨论
此方法在系统缓存中查找具有指定名称的图像对象,并返回该对象(如果存在).如果匹配的图像对象尚未在缓存中,则此方法从指定的文件加载图像数据,对其进行缓存,然后返回结果对象.
在运行iOS 4或更高版本的设备上,如果设备的屏幕比例为1.0,则行为相同.如果屏幕的比例为2.0,则此方法首先搜索具有相同文件名的图像文件,并附加@ 2x后缀.例如,如果文件名是按钮,则首先搜索按钮@ 2x.如果找到2x,则加载该图像并将返回的UIImage对象的scale属性设置为2.0.否则,它会加载未修改的文件名并将scale属性设置为1.0.有关支持具有不同比例因子的图像的更多信息,请参阅iOS应用程序编程指 特别
注意事项
在iOS 4及更高版本中,不需要文件名来指定文件扩展名.在iOS 4之前,您必须指定文件扩展名.
既然你中定位iOS 4.0或更高版本,应该不会需要的文件扩展名.我试图重现这个潜在的错误,但它没有文件扩展名我的预期工作.
以下是在您的应用中创建此效果可能出错的一些想法:
如果您在某个时刻更改了图像,则问题可能来自缓存.
如果您选择不使用文件扩展名,并且同时将"background.jpg"和"background.png"作为选项,则首选项似乎是使用".png"文件.
如果在首次运行应用程序后将目标设置为iOS 4.0及更高版本,则需要文件扩展名,并且图像可能已缓存为空白,这可以回到理论1.
这是我能做到的最好的.
写一个包装器来获取图像
-(UIImage*) getImage:(NSString*)imageName{
UIImage *image;
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
// RETINA DISPLAY
NSString *jpegFile = [imageName stringByAppendingString:@"@2x.jpg"];
image = [UIImage imageNamed:jpegFile];
}
else{
NSString *jpegFile = [imageName stringByAppendingString:@".jpg"];
image = [UIImage imageNamed:jpegFile];
}
return image;
}
Run Code Online (Sandbox Code Playgroud)
并从您的代码调用
bgImageView.image = getImage(@"background");
Run Code Online (Sandbox Code Playgroud)
随着Xcode 6的出现,我发现在某些iOS7设备上可能无法呈现JPG图像(它们可能在某些设备上有效,但在其他设备上无用,或者它们可能无法在任何设备上运行,并且您可能会在不同的设备上看到不同的结果开发者机器,似乎没有任何一致性).无论图像是在XIB中的UIImageView中引用还是以编程方式引用[UIImage imageNamed:](返回nil).
在长时间挠头之后,解决方案是将*.jpg文件扩展名重命名为*.png(显然将文件内容保留为JPG数据).
HTH
| 归档时间: |
|
| 查看次数: |
17311 次 |
| 最近记录: |