iPhone 6 - 通过命名约定使用精确大小的图像

时间:2014-09-24 09:13:15

标签: ios image retina-display iphone-6

关于iPhone的图形资源,

Apple's HIG有以下说法:

  

支持Retina显示。确保为应用中的所有图稿和图形提供高分辨率资源。特别是,为所有其他高分辨率iOS设备提供iPhone 6 Plus的@ 3x资产和@ 2x资产。

     

以原始宽高比显示照片和图形,并且不要将它们缩放到大于100%。您不希望应用中的图稿或图形看起来偏斜或过大。让用户选择是否要放大或缩小图像。

看看这个和其他相关来源,我认为对于一般的图形资产,iPhone 6将采用640x1136尺寸的相同的@ 2x视网膜图像,并将它们扩展到自己的750x1334尺寸。这是对的吗?

我想知道的是,是否有一种简单的方法(例如通过某些命名参数,如@ 2x或-568h)来包含750x1334大小的单独资源和FORCE iPhone 6设备以使用它们而不是按比例放大640x1136资产。

注意:我知道这可以通过识别代码中的设备,可能定义一个类别,并根据设备指向特殊图像来完成。只是想知道没有编码是否有更简单的方法。

1 个答案:

答案 0 :(得分:1)

我假设命名约定如下:

视网膜显示,> iPhone 4s

image_name@2x~iphone.png
视网膜显示iPhone 6 plus:

image_name@3x~iphone.png

注意:iPhone 6 plus不是原始尺寸屏幕的3倍。这是2.34所以当你创建44x44实际像素的1到1像素资产时,我的意思是视网膜上的88x88,然后是iPhone 6 plus上的103x103。但是你应该使用额外的屏幕尺寸来获得不同的UI / UX,而不仅仅是扩大元素的大小。

维持现有尺寸不缩放的方法将固定在这些图像资源上自动布局,确保这些图像受x1尺寸的约束。就像你的图像是x1 32像素平方:

UIImageView *imageView= [[UIImageView alloc] initWithFrame:CGRectZero];
imageView.translatesAutoresizingMaskIntoConstraints = NO;
imageView.image=[UIImage imageNamed:@"your_image"];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[image(32)]" options:0 metrics:0 views:@{@"image":@(imageView)]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[image(32)]" options:0 metrics:0 views:@{@"image":@(imageView)]];

并且使用你的@ 2x @ 3x图像,问题是如果苹果没有资源的@ 3x命名图像,它将升级@ 2x图像的下一个最好的东西。所以可能没有办法轻易避免这种情况。我有点希望苹果会删除基本的x1大小,因为手机有不同的分辨率。我更喜欢一对一的pxiel测量惯例。

像Apple想要的那样工作,使用autolayout作为约定。上面应该保持图像相同,我以后会得到一个iPhone +所以将测试它。