使用新的@ 3x帧正确构图

时间:2014-11-13 22:09:23

标签: ios objective-c iphone frame asset-catalog

所以,我正在创建一个具有很多图像的应用程序,而这些图像是我用于UI的,但我遇到了@ 1x的问题,现在,我试图设置帧,这是2x和3x概念。

首先,我写了一个全局函数库,其中包含一个名为getDevice的函数,因此我可以确定用户使用哪种设备为每个元素设置适当的帧:

//Device
+ (int)getDevice
{
    CGSize bounds = [[UIScreen mainScreen] bounds].size;

    if((bounds.width == 320 && bounds.height == 480) || (bounds.width == 480 && bounds.height == 320))
        return gDevice_iPhone4S;
    else if((bounds.width == 320 && bounds.height == 568) || (bounds.width == 568 && bounds.height == 320))
        return gDevice_iPhone5;
    else if((bounds.width == 375 && bounds.height == 667) || (bounds.width == 667 && bounds.height == 375))
        return gDevice_iPhone6;
    else if((bounds.width == 414 && bounds.height == 736) || (bounds.width == 736 && bounds.height == 414))
        return gDevice_iPhone6Plus;
    else if((bounds.width == 768 && bounds.height == 1024) || (bounds.width == 1024 && bounds.height == 768))
        return gDevice_iPad;

    return gDevice_Unknown;
}

这一切都运行良好,但我的问题围绕着框架尺寸,因为我能够识别正确的设备。所以,例如,让我说我有三个按钮,我想跨越屏幕的底部。在iPhone 4S上,它会是这样的:

iPhone 4S

现在这是使用3张图片:

  • image_1@2x.png(220x80)
  • image_2@2x.png(200x80)
  • image_3@2x.png(220x80)

但是当我想在iPhone 6上使用这些图像时会发生什么?

iPhone 6

现在这个应该使用相同的图像,因为iPhone 6仍然使用@ 2x?

  • image_1@2x.png(220x80) - > (258x94)

但是(220x80)需要成为(258x94)才能拉伸图片。那么当我需要@ 1x,@ 2x,@ iPhone62x和@ iPhone6Plus3x时,拥有@ 1x,@ 2x和@ 3x iPhone图像的重点是什么?

1 个答案:

答案 0 :(得分:1)

是的,乍一看有点令人困惑。

对于iPhone 4 / 4s / 5 / 5s和iPhone 6来说,拥有@ 2x的点是这些屏幕的DPI相等(326 ppi)。

另一方面,您需要为这些iPhone设置不同的图像特定于您的应用程序设计,并且您有以下解决方案:

  • 使用-resizableImageWithCapInsets:创建的可伸缩图像,使图像在110pt和129pt上都看起来不错
  • 或者如果不可能使用不同的图像,具体取决于正在运行的设备应用程序。您可以使用方法+getDevice(或类似方法)来确定应加载的图片(-568h@2x-667h@2x)。

有关详情和方便的UIImage类别,请参阅此答案https://stackoverflow.com/a/26684508/753878