【问题标题】:iPhone: Do I have to have images for both retina and non-retina for all image?iPhone:我是否必须为所有图像提供视网膜和非视网膜图像?
【发布时间】:2012-06-29 05:00:34
【问题描述】:

我听说您需要为视网膜和非视网膜创建图像。
您需要将它们命名为 image@2x.png 用于视网膜,而 image.png 用于非视网膜。

但我想对视网膜和非视网膜都使用 image.png。
并在程序中缩小它,因为通过代码调整图像大小比使用绘图工具重新创建图像更容易。

使用以下代码可以做到这一点:

[button setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];


UIImageView *imageView = [[UIImageView alloc] init];
imageView.frame = CGRectMake(20, 20, 40, 40);
imageView.image = [UIImage imageNamed:@"image.png"];

image.png 缩小为按钮大小或图像视图大小。

这是一种常见的方式吗?
这种方式有什么缺点吗?
如果应用程序没有 image.png 和 image@2x.png,苹果会拒绝吗?

【问题讨论】:

    标签: iphone ios retina-display


    【解决方案1】:

    [EDIT1 - 特殊情况]

    但是这个问题有一个特殊情况。由于 Apple 当前的 2x 算法本质上是像素加倍(在每个方向上),如果您的图像仅由垂直和水平线组成,那么我将着手提供这些图像作为 1x 并让 API 自动放大这些图像,一个例如,一个按钮的图像看起来像这样

    因为这将有零问题升级并且仍然看起来非常清晰!!! (在两部 iPhone 和两部 iPad 上测试)

    [原创] 如果您只是为了显示而这样做,那么一种方法是简单地提供仅适用于视网膜的图像,并允许 UIImageView 为非视网膜显示器自动缩小图像。它会这样做,不会被苹果拒绝。

    对于视网膜显示,UIImageView 在每个方向上自然会占用 2x 像素的空间,因此当图像被读入并在视网膜显示上显示时,API 将识别不需要进行缩放! !

    不过要小心!!!缩小图像可以说按钮可能会产生使您的图像或按钮看起来不干净/像素化的效果。这就是为什么“建议”同时提供两者的原因,比如说基于矢量的图像,您将能够为给定的分辨率生成最高质量的图像。有点取决于你想如何使用这些图像。

    作为旁注。我建议如果您确实选择了调整大小选项,那么您尝试预先识别设备的屏幕分辨率并在初始化按钮或 UIImageView 等时仅调整一次图像的大小(如果需要,在我的情况下,对于较小的分辨率)。 .. 这样您就不会在每次需要将其渲染到屏幕时都会受到性能下降的影响。

    【讨论】:

    • 我在从网络上获取 UITableView 的缩略图时使用了上述缩小实际图像与特殊情况的图像。 Web 服务将它们缩放到视网膜分辨率,当它们找到我时,我识别出屏幕分辨率,然后在将 UIImage 存储到桌子上的 UIImageView 之前再次将图像缩小到 1 倍分辨率(如果不是视网膜)。这为这两种情况提供了最佳的潜在解决方案,并且仍然将速度保持在最佳状态,没有任何阻力!!!
    • 感谢您提供有用的建议和有用的信息。我将只创建具有 x2 像素的 image.png。
    • 抱歉 ping 一个旧线程。因此,基本上,如果我想将我得到的 Twitter 头像显示为 400x400,只需将 UIImageView 的框架调整为 200x200 即可使其在视网膜和非视网膜显示器中看起来都不错,不是吗?
    • 您不必这样做,但它通常会使应用程序在设备之间看起来更好。您的图像看起来像什么也非常重要。在我的一个应用程序中,有一大堆图像只有垂直和水平线,实际上没有任何圆形或阴影,所以我重新创建双倍尺寸的图像没有意义。
    • 好答案!同样,我有两个按钮(大小不同)但背景相同......我应该制作两组单独的图像,制作一组(用于较大的按钮)并将其缩放为较小的按钮吗?跨度>
    【解决方案2】:

    好吧,您可能不想听到这个,但最好使用绘画工具。如果您让设备每次都调整图像大小,它会减慢您的应用程序 - 取决于您执行此任务的频率。我认为苹果不会因为您不包含 @2x 图像而拒绝您。我以前没有问题地忘记了它们。

    【讨论】:

      【解决方案3】:

      如果您不想包含 @2x 图像,那么您的应用程序将适用于视网膜和非视网膜 iphone。 Apple 不会为此拒绝您的二进制文件。
      唯一的缺点是,您将显示正常的图像,而不是视网膜的高质量图像。

      【讨论】:

      • 这不正确。您可以提供 2x 图像(文件名中没有 @2x),API 将缩小分辨率以适应较低的分辨率,您不必提供 1x 图像和高档。但无论哪种方式都可能存在不需要的伪影。
      • @trumpetlicks 我没有说你不能使用更大的图像,天气 2x 3x 4x,但是如果你使用 @2x 后缀然后不提供 1x 图像,那么你的应用程序将显示图片。确实,使用不带@2x 后缀的较大图像会使您的应用同时在视网膜/非视网膜设备上运行,但当您在非视网膜设备中使用较大图像时,它可能会影响性能
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      相关资源
      最近更新 更多