2013-02-17 17 views
5

Chciałbym utworzyć nowe UIColor s, które są używane w mojej aplikacji przez cały czas. Od czasu do czasu RGB jest nieznacznie podkręcane (dokładny kolor jest dyskutowany)Użyj kategorii iOS, aby utworzyć nowy kolor

Obecnie muszę stworzyć nowe kolory z RGB, a kod jest cały czas posypywany i powtarzany.

Czy jest lepszy sposób, w którym mogę utworzyć nowy kolor i używać go przez moją aplikację.

[UIColor myNewCustomRedColor] 

Jaki jest najlepszy wzór - czy kategoria jest właściwym wyborem - jeśli tak, to w jaki sposób? Jeśli nie, to jakie jest zalecane podejście.

Odpowiedz

5

Jednym ze sposobów, w jaki korzystałem przy innych projektach, jest utworzenie pliku ProjectStyle.h, który ma # definicje niestandardowych kolorów i innych stałych związanych z stylem. Wystarczy go zaimportować.

Coś jak:

ProjectStyles.h 

#define RED_HEADER_COLOR [UIColor colorWithRed:0.8f green:0.1f blue:0.1f alpha:0.9f] 
#define RED_BACKGROUND_COLOR [UIColor colorWithRed:0.9f green:0.3f blue:0.1f alpha:1.0f] 
#define PRIMARY_FONT [UIFont fontWithName:@"HelveticaNeue-Bold" size:12.0f] 

Można też mieć odpowiedni plik .m jeśli chciał stworzyć stałe wystąpień niektórych UIColor lub UIFont przedmiotów, coś jak

ProjectStyles.m 

+ (UIColor *) redHeaderColor 
{ return [UIColor colorWithRed:0.8f green:0.1f blue:0.1f alpha:0.9f]; } 

+ (UIColor *) redBackgroundColor 
{ return [UIColor colorWithRed:0.9f green:0.3f blue:0.1f alpha:1.0f]; } 

+ (UIFont *) primaryFont 
{ 
    static UIFont *font = nil; 
    if (font == nil) 
     font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:12.0f]; 
    return font; 
} 

A potem oczywiście odsłonić te w nagłówku

Inną rzeczą, która podoba mi się podejście ProjectStyle jest to, że po pewnym czasie będziesz chciał więcej niestandardowych rzeczy niż jus t kolory - niestandardowe czcionki, niestandardowa linia i cienie. Posiadanie klasy stylowej lub nagłówka do umieszczenia wszystkich tych elementów daje jedno miejsce do sprawdzenia, jakie niestandardowe elementy zostały już zdefiniowane dla różnych rzeczy, i bardzo oczywiste #import dla późniejszych programistów do śledzenia scentralizowanej oraz niestandardowej informacji .

Po umieszczeniu niestandardowych elementów w kategoriach kończy się to dostosowywaniem rozłożonym na kilka kategorii, a także możliwością (najczęściej zdalną) kolizji nazwy kategorii z bibliotekami innych firm.

+1

Sesja WWDC 2012 216 prezentuje bardzo podobne podejście, jeśli ktokolwiek jest zainteresowany. – MaxGabriel

+0

Podczas korzystania z niektórych stylów podobny wzór wydaje się odpowiedni, zawsze powstrzymałbym się od używania dyrektyw preprocesora do takiego zadania - definicje nie są bezpieczne dla typu, a zatem brzydkie. Dlaczego nie używać fabryki o odpowiednim wyglądzie (jak kolor)? Coś w stylu '[MyAppearance color: @" ultraBlue "]' – Till

+3

#define jest bezpieczne, ponieważ są one prawdziwym kodem, który jest sprawdzany przez analizator statyczny i debugger w taki sam sposób, jak każdy inny kod (np. użyj # definicji, która daje UIColor, ale potrzebuje CGColor, otrzymasz natychmiastowe ostrzeżenie). Edytor również autouzupełnia kod #define, więc autouzupełnianie MY_COLOR.CGColor.Również #define item autouzupełnianie w całości - w twoim przykładzie nadal będziesz musiał wpisać @ "ultraBlue", co pozostawia miejsce na błąd. Przy użyciu metody #define lub factory style powinny łatwo autouzupełnić, aby wyeliminować błąd. –

9

Kategoria jest dobrym wyborem na coś takiego. Zwykle tworzę nową parę plików .h/.m, MyCategories.h/MyCategories.m, która zawiera powszechnie używane kategorie, które chcesz mieć wszędzie.

MyCategories.h:

@interface UIColor (MyCategory) 

+ (UIColor *)customRedColor; 

@end 

MyCategories.m

@implementation UIColor (MyCategory) 

+ (UIColor *)customRedColor { 
    return [UIColor redColor]; 
} 

@end 

Można też zaimportować plik .h, gdziekolwiek jest to potrzebne, czy można trzymać importu w MojaApl-prefiks. plik pch.

+0

Dodam tylko, że dobrym pomysłem jest nazwanie plików kategorii jako + Nazwa kategorii - na przykład UIColor + CustomColors, uważam, że jest to bardzo przydatne przy organizacji projektów. –

Powiązane problemy