OMG*_*POP 1 iphone ipad ios retina-display
我使用iPhone的bg.png,iPhone视网膜和iPad的bg @ 2x,iPad视网膜的bg @ 4x.这是我写的代码:(在Helper.m中)
+ (UIImage *) imageNamed:(NSString *)name
{
name = [name stringByReplacingOccurrencesOfString:@".png" withString:@""];
UIImage *image;
if (IS_IPAD) {
if (IS_RETINA) {
image = [UIImage imageNamed:[NSString stringWithFormat:@"%@@4x.png", name]];
if (image) {
return image;
}
}
return [UIImage imageNamed:[NSString stringWithFormat:@"%@@2x.png", name]];
}
else {
if (IS_RETINA) {
image = [UIImage imageNamed:[NSString stringWithFormat:@"%@@2x.png", name]];
if (image) {
return image;
}
}
return [UIImage imageNamed:name];
}
}
Run Code Online (Sandbox Code Playgroud)
该文件是正确的,但图像的大小是错误的.
如果系统(使用[UIImage imageNamed:@"bg.png"])自动选择文件,则在iPhone视网膜上,大小仍为320x480(1点= 4像素).
但如果我使用[Helper imageNamed:@"bg.png"],尺寸为640x960.(1分= 1像素)
那么无论如何要改正尺寸?
在视网膜设备上
[UIImage imageNamed:@"bg.png"]
Run Code Online (Sandbox Code Playgroud)
bg@2x.png首先搜索.如果该图像存在,则加载它并且scale图像的属性自动设置为2.0.另一方面,
[UIImage imageNamed:@"bg@2x.png"]
Run Code Online (Sandbox Code Playgroud)
也加载该图像,但使用默认值scale = 1.0.
如果必须使用自定义加载机制,则必须调整比例因子.由于scale是只读属性,UIImage因此无法直接设置.我所知道的一种方法是
UIImage *tmpImage = [UIImage imageNamed:@"bg@2x.png"];
UIImage *properlyScaledImage = [UIImage imageWithCGImage:[tmpImage CGImage]
scale:2.0
orientation:UIImageOrientationUp];
Run Code Online (Sandbox Code Playgroud)
为什么重塑苹果已经提供的东西?该imageNamed:方法已支持使用~iphone和~ipad后缀加载iPhone或iPad特定图像的功能.
要获得iPad特定的视网膜图像,您只需将其命名即可bg@2x~ipad.png.要获得iPad特定的非视网膜图像,请将其命名bg~ipad.png.
您的代码遇到的问题是由于非标准的命名约定,图像加载了错误的比例.
更新:根据注释中的其他信息,解决此问题的更好方法是使用UIImage imageNamed:方法调用替换方法的使用UIImage imageWithData:scale:.这提供了更好的内存管理以及为iPhone视网膜和iPad非视网膜之间的自定义命名约定和图像共享指定适当比例的能力.
| 归档时间: |
|
| 查看次数: |
1805 次 |
| 最近记录: |