2

我的通用应用程序有两个故事板。一款用于 iPhone,一款用于 iPad。很多代码都是以编程方式编码的,两个故事板共享相同的 ViewController。一个如何在视图控制器中工作的示例如下:

  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){ iPadInUse = YES;}
    else { iPadInUse = NO;}

因此,如果我有需要在两个设备上显示的图像 - 我会写以下内容:

       if (iPadInUse == YES) { recordViewImage = @"iPadRecordPanel@2x.png"
                             // x and y positions to adjusted accordingly }
               else {  recordViewImage = @"recordingPanel@2x.png"
                    //  // x and y positions to adjusted accordingly}

在模拟器上,所有设备(视网膜/非视网膜)一切正常。我拥有的唯一实际设备是 iPhone 4S(一切正常)。这可以吗,因为实际上没有从非视网膜设备加载任何非视网膜图像(所有图像后缀为@2x.png??我的应用程序会因此被拒绝吗??

4

4 回答 4

7

不,这不行。

在没有视网膜屏幕的设备上,将使用更多内存来加载视网膜图像。您应该始终提供非视网膜和视网膜图像,并且永远不要@2x直接加载图像。iOS 将为您加载正确的图像。

于 2013-05-28T10:26:44.753 回答
5

您的应用不会被拒绝,一切都会正常运行。但是有两个问题:

  1. 在非视网膜设备上,App 将加载更大的图像。那里不需要。所以内存利用率将在那里增加而没有任何结果。

  2. 您不需要为 iphone 和 ipad 编写条件代码来设置图像。您可以在命名图像文件时使用波浪号:

苹果手机:

  1. image@2x~iphone.png(仅限视网膜)
  2. image@2x.png(仅限视网膜)
  3. 图片~iphone.png
  4. 图像.png

平板电脑:

  1. image@2x~ipad.png(仅限视网膜)
  2. image@2x.png(仅限视网膜)
  3. 图片~ipad.png
  4. 图像.png
于 2013-05-28T10:39:07.987 回答
1

当您将其命名为 iPadRecordPanel@2x.png 时,它不会显示正确的图像。您可以命名 iPadRecordPanel.png,它将从捆绑包中获取 2 倍的图像。你不能给@2x 后缀。它将自动识别正确的图像并显示它。

于 2013-05-28T10:28:13.523 回答
1

No your app will not be rejected but you should not do this因为不提供非视网膜图像可能会由于所需的缩减操作而降低旧设备的性能和图像质量。

希望它可以帮助你。

于 2013-05-28T10:28:21.170 回答