8

我在 iOS 开发方面相对较新。

我目前正在使用 cocos2d 库构建一个应用程序,该库可用于 iPad Retina、iPad、iPhone 5 和 iPhone 4s/4。

我正在设置所有图像,并且正在尝试找出命名约定。

有谁知道可以帮助我的指南吗?

假设我有一个 background.png。

据我了解:

  • background.png -> iPhone(非视网膜/后备)
  • 背景-hd.png -> iPhone 4s/4 (视网膜)
  • background-ipad.png -> iPad(非视网膜)
  • 背景-ipadhd.png -> iPad(视网膜)

并且所有其他文件都使用相同的命名约定?例如:

  • 任意按钮.png -> iPhone(非视网膜/后备)
  • 任意Button-hd.png -> iPhone 4s/4 (视网膜)
  • 任意Button-ipad.png -> iPad(非视网膜)
  • 任意按钮-ipadhd.png -> iPad(视网膜)

我如何命名 iPhone 5 文件?

我搜索了一下,似乎找不到任何有形的指南。

谢谢!

4

4 回答 4

10

操作系统具有您可以使用的命名约定(并为您强制执行,这意味着您只需将文件引用为@"fileName")。文档可在此处获得

  • fileName.png -> iPhone(非视网膜/后备)
  • 文件名@2x.png -> iPhone 4s/4(视网膜)
  • 文件名~ipad.png -> iPad(非视网膜)
  • 文件名@2x~ipad.png -> iPad(视网膜)

注意:~iphone 也存在,并且可以与~ipad 一起使用/代替使用。同时使用 ~ipad 和 ~iphone 可以防止 Apple 可能引入的第三种习语。咳嗽电视咳嗽

对于 iPhone 5,操作系统不强制执行命名方案。但是,使用与启动图像相同的方案可能是明智的。

  • 文件名-568h@2x.png -> iPhone 5

为了在整个应用程序中轻松处理此问题,您可以创建一个类别,并在您知道您将拥有 iPhone 5 友好图像以及常规尺寸图像的地方使用它。可以制作一个简单的版本,如下所示。

UIImage+iPhone5Image.h

#import <UIKit/UIKit.h>

@interface UIImage (iPhone5Image)

+ (UIImage*)iPhone5ImageNamed:(NSString*)imageName;

@end

UIImage+iPhone5Image.m

#import "UIImage+iPhone5Image.h"

#define IsIPhone5() ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 568)

@implementation UIImage (iPhone5Image)

+ (UIImage*)iPhone5ImageNamed:(NSString*)imageName
{
    if (IsIPhone5()) {
        NSString* newImageName = [NSString stringWithFormat:@"%@-568h", imageName];
        return [UIImage imageNamed:newImageName];
    }
    else {
        return [UIImage imageNamed:imageName];
    }
}

@end
于 2013-02-13T17:55:29.813 回答
3

看起来您遵循 cocos2d 命名约定而不是标准 UIKit 版本。它们是不同的,如果您使用 cocos2d,建议您使用 cocos2d 后缀而不是 UIKit 后缀。

它们如下:

  • 非视网膜 iPhone(无后缀)
  • 视网膜 iPhone-hd
  • 非视网膜 iPad-ipad
  • 视网膜 iPad-ipadhd
  • iPhone 5-iphone5-iphone5hd

使用 cocos2d 方法的设备,你想加载的所有文件都可以像这样后缀。

于 2013-02-13T20:26:37.660 回答
2

好的,现在cocos2d本身支持iphone5了。

-hd.png for iPhone HD 
-ipad.png for iPad 
-ipadhd.png for iPad HD
-wide.png for iphone 5
-widehd.png for iPhone 5 HD

如果您的 Cocos2d 版本较旧,请使用:

static inline NSString *i5res(NSString * data)
{
    if(IS_IPHONE5)
    {
        return [data stringByReplacingOccurrencesOfString:@"." withString:@"-whd."];
    }

    return data;
}
//usage
CCSprite *bg = [CCSprite spriteWithFile:i5res(@"bg.png")];
于 2013-04-12T17:13:54.763 回答
0

为了让编译器自动选择正确的图像,您需要将标准(非视网膜)图像命名为 image.png 和视网膜图像 image@2x.png。然后在您的代码中仅参考标准代码。编译器将完成其余的工作。因此,如果您正在设置图像,它应该如下所示:

UIImage *anImage = [UIImage imageNamed:@"image.png"];

iPhone 5 没有特定的命名约定,因为该应用程序不会自动为 iPhone 5 选择不同的图像大小,您必须在代码中使用以下代码来执行此操作:

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenHeight = screenRect.size.height;

if([[UIScreen mainScreen]bounds].size.height == 568){
    UIImage *signUp = [UIImage imageNamed:@"signup-bg-568h.jpg"];
    [signUpImage setImage:signUp];
}
else{
    UIImage *signUp = [UIImage imageNamed:@"signup.jpg"];
    [signUpImage setImage:signUp];
}
于 2013-02-13T17:55:18.463 回答