如何正确显示@ 2x视网膜图像

时间:2013-03-26 09:23:13

标签: objective-c uiimage retina-display

我正在使用Xcode 4.5.2,该应用程序的目标是iOS 6.0。 在我的应用程序中,我无法显示iPad Retina图像。我知道我必须使用@ 2x~ipad.png扩展名才能让它们正确显示并且我这样做。我的图像是根据每个设备的扩展名进行命名的。 以下是我的命名方式。

enter image description here

然而,

 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模拟器设置,没有结果。
我做错了什么?

更新
非视网膜

enter image description here

视网膜:

NSLog(@"%f", image.scale)

imageNamed方法给出1.0

之后

enter image description here

更新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,它就适合。知道为什么要缩放两次吗?

1 个答案:

答案 0 :(得分:3)

视网膜和非视网膜图像在用作UIImage或类似物时将具有相同的宽度和高度,将其视为在视网膜上显示图像的DPI加倍,而不是宽度或高度。

这是为了在编码视网膜和非视网膜时保持透明。