Utilisez la catégorie iOS pour créer une nouvelle couleur

Je voudrais créer de nouveaux UIColor qui sont utilisés dans mon application tout au long. De time en time, le RVB est légèrement modifié (la nuance de couleur exacte est en cours de discussion)

Actuellement, je dois créer les nouvelles colors de RVB et le code est réparti partout et répété.

Existe-t-il un meilleur moyen de créer une nouvelle couleur et de l'utiliser dans mon application?

 [UIColor myNewCustomRedColor] 

Quel est le meilleur model ici – Catégorie est le bon choix – si oui, comment? Si non, quelle est l'approche recommandée?

La catégorie est un bon choix pour quelque chose comme ça. Habituellement, je crée simplement une nouvelle paire de files .h / .m, MyCategories.h / MyCategories.m , qui contient les catégories les plus utilisées que vous voulez partout.

MesCatégories.h:

 @interface UIColor (MyCategory) + (UIColor *)customRedColor; @end 

MesCatégories.m

 @implementation UIColor (MyCategory) + (UIColor *)customRedColor { return [UIColor redColor]; } @end 

Vous pouvez importer le file .h où vous le souhaitez ou vous pouvez coller l'import dans votre file MyApp-Prefix.pch.

Une approche que j'ai utilisée sur d'autres projets consiste à créer un file ProjectStyle.h, qui a #defines pour les colors personnalisées et d'autres constantes liées au style. Vous avez juste besoin de l'importer.

Quelque chose comme:

 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] 

Vous pouvez également avoir un file .m correspondant si vous voulez créer des instances constantes de certains objects UIColor ou UIFont, quelque chose comme

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

Et puis bien sûr exposer ceux dans l'en-tête

L'autre chose que j'aime dans une approche de type ProjectStyle est qu'au bout d'un moment, vous voudrez plus de choses personnalisées que de simples colors – des fonts personnalisées, des lignes et des ombres personnalisées. Avoir une class de style ou un en-tête pour placer toutes ces choses vous donne un endroit pour searchr quels éléments personnalisés sont déjà définis pour toutes sortes de choses, et un #import très évident pour les codeurs plus tardifs de bien vous centraliser des informations personnalisées .

Si vous placez simplement des éléments personnalisés dans des catégories, vous finissez avec la personnalisation répartie sur plusieurs catégories, ainsi que la possibilité (principalement à distance) de collisions de noms de catégories avec d'autres bibliothèques tierces.