2013-02-13 2 views
7

Я относительно новичок в разработке iOS.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 (сетчатка)

И то же именование будет использоваться для всех остальных файлов? Например:

  • arbitraryButton.png -> iPhone (не Сетчатка/резервный)
  • arbitraryButton-hd.png -> iPhone 4S/4 (сетчатка)
  • arbitraryButton-ipad.png -> IPAD (не сетчатка)
  • arbitraryButton-ipadhd.png -> IPad (сетчатка)

Что я называю iPhone 5 файлов?

Я искал немного и не мог найти каких-либо осязаемых проводников там.

Спасибо!

ответ

9

ОС имеет соглашение об именах, которые вы можете использовать (и навязывает для вас, это означает, что вам нужно только для ссылки на файл в качестве @"fileName"). Документация is available here.

  • fileName.png -> iPhone (не Сетчатка/резервный)
  • [email protected] -> iPhone 4S/4 (сетчатка)
  • имя_файла ~ ipad.png -> IPAD (не сетчатка)
  • файлName @ 2x ~ ipad.png -> iPad (сетчатка)

Примечание: ~ iphone также существует и может использоваться с/вместо использования ~ ipad. Использование как ipad, так и iphone обеспечит защиту от третьего идиома, который может представить Apple. кашель TV кашель

Что касается 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 
+0

Компилятор не будет автоматически выбирать iPhone 5 изображений, это будет для загрузки изображения, и это является стандартом конвенции. Но для других полноэкранных изображений в приложении вам нужно проверить размер экрана и настроить его самостоятельно. – JeffN

+0

Yup, просто испытал это сам. Будет добавить ответ на удобный способ справиться с этим. – WDUK

+0

Можно также проверить мой ответ ниже. У него есть способ справиться с этим, что работает – JeffN

0

Чтобы компилятор автоматически выбирал правильное изображение, вы захотите назвать стандартные изображения (не сетчатки) image.png и изображения сетчатки [email protected] Тогда в вашем коде просто обратитесь к стандартному. Компилятор сделает все остальное. Так что, если вы настраиваете изображение должно выглядеть следующим образом:

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]; 
} 
3

Похоже, вы после конвенций cocos2d именовании не стандартные версии UIKit. Они разные, и если вы используете cocos2d, вам рекомендуется использовать суффиксы cocos2d, а не UIKit.

Они заключаются в следующем:

  • Non сетчатка iPhone (нет суффикса)
  • Retina iPhone -hd
  • Non сетчатка IPad -ipad
  • Retina IPad -ipadhd
  • iPhone 5 -iphone5 и -iphone5hd

Все файлы, которые вы хотите загрузить на основе устройства, которые используются с методами cocos2d, могут быть суффиксными.

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")]; 
Смежные вопросы