2013-02-13 17 views
7

Jestem stosunkowo nowy w rozwoju iOS.Konwencje nazewnictwa obrazu iOS

Aktualnie tworzę aplikację przy użyciu biblioteki cocos2d, która będzie dostępna dla iPada Retina, iPada, iPhone'a 5 i iPhone'a 4s/4.

Instaluję wszystkie moje obrazy i próbuję ustalić konwencje nazewnictwa.

Czy ktoś wie o przewodniku, który mógłby mi pomóc?

Powiedz, że mam background.png.

Z tego co rozumiem:

  • background.png -> iPhone (bez siatkówki/awaryjna)
  • background-hd.png -> iPhone 4S/4 (siatkówki)
  • tła- ipad.png -> iPad (non-siatkówka)
  • background-ipadhd.png -> iPad (siatkówka)

A sama konwencja nazewnictwa będą używane dla wszystkich innych plików? Np

  • arbitraryButton.png -> iPhone (nie siatkówki/powrót)
  • arbitraryButton-hd.png -> iPhone 4S/4 (siatkówki)
  • arbitraryButton-ipad.png -> IPAD (non-siatkówka)
  • arbitraryButton-ipadhd.png -> iPad (siatkówka)

Co mogę nazwać iPhone 5 pliki?

Szukałem trochę i nie mogę znaleźć żadnych konkretnych przewodników tam na ten temat.

Dziękujemy!

Odpowiedz

9

OS ma konwencję nazewnictwa, które można wykorzystać (i wymusza na was, co oznacza, że ​​wystarczy odwołać jak plik @"fileName"). Dokumentacja is available here.

  • fileName.png -> iPhone (nie siatkówki/zastępczą)
  • [email protected] -> iPhone 4S/4 (siatkówki)
  • fileName ~ ipad.png -> IPAD (nie siatkówka)
  • nazwa pliku @ 2x ~ ipad.png -> iPad (siatkówka)

Uwaga: ~ iphone również istnieje i może być używany z/zamiast używania ~ ipad. Używanie zarówno iPada, jak i iPhone'a zabezpieczałoby przed trzecim idiomem, który może wprowadzić Apple. kaszel TV kaszel

Jak dla iPhone 5, system operacyjny nie wymusza schemat nazewnictwa. Ale byłoby rozsądnie użyć tego samego schematu dla obrazu startowego.

Aby to łatwo obsłużyć całej aplikacji, możesz utworzyć kategorię i użyć go gdzie wiesz że masz iPhone 5 przyjazny obraz, a także obraz o regularnych rozmiarach. Można stworzyć prostą wersję, taką jak ta poniżej.

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

Kompilator nie będzie automatycznie wybierać iPhone 5 zdjęć, to będzie dla ładowania obrazu, a to jest średnia konwencji. Ale w przypadku innych pełnoekranowych obrazów w aplikacji musisz sprawdzić rozmiar ekranu i ustawić go samodzielnie. – JeffN

+0

Tak, właśnie to przetestowałem. Dodam, aby odpowiedzieć na wygodny sposób radzenia sobie z tym. – WDUK

+0

Może sprawdzić również moją odpowiedź poniżej. Ma sposób na poradzenie sobie z tym, który działa – JeffN

0

Aby kompilator automatycznie wybrał właściwy obraz, należy nazwać standardowe (nieretinowe) obrazy image.png i obrazy siatkówki [email protected] Następnie w swoim kodzie wystarczy odwołać się do standardowego. Kompilator zrobi resztę. Więc jeśli ustawienie obraz powinien wyglądać następująco:

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

Nie ma zbyt konkretną konwencję nazewnictwa dla iPhone 5, ponieważ aplikacja nie będzie automatycznie wybrać inny rozmiar obrazu dla iPhone 5, pokochasz trzeba to zrobić w kodzie z czymś takim:

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

Wygląda jak jesteś po nie konwencji nazewnictwa Cocos2d standardowe wersje UIKit. Są różne i jeśli używasz cocos2d, zaleca się używanie sufiksów cocos2d, a nie UIKit.

Są one następujące:

  • dla siatkówki iPhone (bez przyrostka)
  • siatkówki iPhone -hd
  • dla siatkówki IPAD -ipad
  • siatkówki IPAD -ipadhd
  • iPhone 5 -iphone5 i -iphone5hd

Wszystkie pliki, które mają być ładowane na podstawie urządzenia używanego w metodach cocos2d, mogą być dodawane w ten sposób.

2

OK, teraz sam cocos2d obsługuje 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 

Jeśli wersja Cocos2d jest stary następnie użyć:

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

    return data; 
} 
//usage 
CCSprite *bg = [CCSprite spriteWithFile:i5res(@"bg.png")];