【问题标题】:iPhone 6 - Using precisely sized images through naming conventioniPhone 6 - 通过命名约定使用精确尺寸的图像
【发布时间】:2014-09-24 09:13:14
【问题描述】:

Apple's HIG 对 iPhone 的图形资源有以下看法:

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

以原始纵横比显示照片和图形,缩放比例不要超过 100%。您不希望应用中的艺术作品或图形看起来歪斜或太大。让用户选择是否放大或缩小图像。

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

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

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

【问题讨论】:

标签: ios image retina-display iphone-6


【解决方案1】:

我假设命名约定如下:

视网膜显示屏,> iPhone 4s

image_name@2x~iphone.png

视网膜显示屏 iPhone 6 plus:

image_name@3x~iphone.png

注意:iPhone 6 plus 的屏幕不是原始尺寸的 3 倍。它是 2.34,所以当你创建 1 到 1 个 44x44 实际像素的像素资产时,我的意思是视网膜上是 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 尺寸,因为手机有不同的分辨率。我更喜欢一对一的像素测量约定。

按照 Apple 的要求工作,使用自动布局作为惯例。上面应该保持图像相同,我稍后会得到一个 iPhone plus,所以会测试它。

【讨论】:

  • 感谢 elliotrock,我知道常规的 2x 和 3x 约定。我想弄清楚的是:iPhone 6 现在将自动使用为 iPhone 5 屏幕尺寸制作的资源,然后按比例放大它们。有没有办法避免这种情况,通过命名约定,强制 iPhone 6 使用适合自己屏幕尺寸的资产。
  • 从您的反馈@Madhu 中添加到我的回答中
  • 感谢@elliotrock 提供的详细信息,我认为这与我们获得此查询的最终答案差不多。我无法拿到实际的设备,所以请在检查时告诉我是否一切正常。
猜你喜欢
  • 2016-09-28
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多