我正在使用Xcode 4.5.2,该应用程序的目标是iOS 6.0。 在我的应用程序中,我无法显示iPad Retina图像。我知道我必须使用@ 2x~ipad.png扩展名才能让它们正确显示并且我这样做。我的图像是根据每个设备的扩展名进行命名的。 以下是我的命名方式。
然而,
NSString *name=@"appearanceConnection.png";
//NSString *name=@"appearanceConnection"; //I did check this
//I did check the target
UIImage *image = [UIImage imageNamed:name];
NSLog(@"%f",image.size.width);
显示@ 1x图像的宽度。
如果我尝试手动设置正确的图像名称:
if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
([UIScreen mainScreen].scale == 2.0)) {
// Retina display
name=@"appearanceConnection@2x~ipad.png";
NSLog(@"retina");
}
else
{
name=@"appearanceConnection.png";
NSLog(@"non-retina");
}
UIImage *image = [UIImage imageNamed:name];
NSLog(@"%f",image.size.width);
正确选择@ 2x然后在我将其添加到视图时按2.0缩放。
我多次清理/重建我的项目,我重置了IOS模拟器设置,没有结果。
我做错了什么?
更新
非视网膜
视网膜:
NSLog(@"%f", image.scale)
在imageNamed
方法给出1.0
更新2: 我正在尝试优化我的动画外观,所以我想加载一个大图像并按帧剪切。 首先,我加载大图像(@ 2x或1 @ x),然后使用循环
for (int i = 0; i<numberOfFrames; i++)
{
CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage,
CGRectMake(i*width, 0.0f, width, height));
UIImage *animationImage = [UIImage imageWithCGImage:imageRef];
if (isFlip)
{
[animationImages insertObject:animationImage atIndex:0];
}
else
{
[animationImages addObject:animationImage];
}
CGImageRelease(imageRef);
}
我切割了这个大图像并创建了动画。 如果是视网膜显示,宽度和高度乘以2。
也许这是一个警告?
UIImage *animationImage = [UIImage imageWithCGImage:imageRef];
将图像缩放两次?
但是,如果我缩放(0.5,0.5)由此图像初始化的UIImageView,它就适合。知道为什么要缩放两次吗?
答案 0 :(得分:3)
视网膜和非视网膜图像在用作UIImage或类似物时将具有相同的宽度和高度,将其视为在视网膜上显示图像的DPI加倍,而不是宽度或高度。
这是为了在编码视网膜和非视网膜时保持透明。