2013-02-17 11 views
5

私のアプリで使用されている新しいUIColorを新しく作成したいと考えています。時々、RGBは若干微調整されています(正確な色合いが議論されています)iOSカテゴリを使用して新しい色を作成する

現在、私はRGBから新しい色を作成しなければならず、コードはすべて振りかざされ、繰り返されます。

私は新しい色を作成し、それを私のアプリから使いこなす良い方法がありますか?

[UIColor myNewCustomRedColor] 

ここで最も良いパターンは何ですか - カテゴリは正しいですか? -whatが推奨されていない場合。

答えて

5

私が他のプロジェクトで使用したアプローチの1つは、ProjectStyle.hファイルを作成することです。このファイルは、カスタム色や他のスタイル関連の定数を定義しています。あなたはそれをインポートする必要があります。

ような何か:もちろん、あなたは、いくつかのUIColorやUIFontオブジェクトの一定のインスタンスを作成したい場合にも対応する.Mファイルを持っている可能性が

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] 

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

のようなものとヘッダーにあるものを公開する

私がProjectStyleのようなアプローチについて気に入っているもう一つのことは、しばらくするとjusよりも多くのカスタムのものが欲しいということですt色 - カスタムフォント、カスタムラインとシャドウ。これらのすべてのものを配置するためのスタイルクラスまたはヘッダーを持つことで、あらゆる種類のカスタム要素がすでに定義されているかどうかを調べる場所が1つと、後でコーダーがカスタム情報を集中管理できるように# 。

カスタム要素をカテゴリに配置するだけで、いくつかのカテゴリにまたがるカスタマイズと、他のサードパーティライブラリとのカテゴリ名の衝突の可能性(主にリモート)になります。

+1

WWDC 2012セッション216は、誰かが興味を持っている場合、これに非常に似たアプローチを示しています。 – MaxGabriel

+0

いくつかのスタイルシートを使用するパターンは適切ですが、私はいつもそのようなタスクのためにプリプロセッサディレクティブを使用することを控えています - 型定義は型安全ではないので醜いです。なぜ外見の属性(色のような)の工場を使用しないのですか? '[MyAppearance color:@" ultraBlue "]' – Till

+3

のようなものは、他のコードと同じようにスタティックアナライザーとデバッガーによってチェックされる実際のコードになるので、タイプセーフです。 #defineを使用してUIColorを生成しますが、CGColorが必要な場合はすぐに警告が表示されます)。エディタは#defineコードをオートコンプリートするので、MY_COLOR.CGColorはオートコンプリートします。また、#define項目は完全にオートコンプリートされます。あなたの例では、@ "ultraBlue"をタイプしなければならないので、エラーの余地が残ります。 #defineメソッドまたはfactoryメソッドを使用すると、スタイルを簡単に自動補完してエラーを排除する必要があります。 –

9

カテゴリは、このようなものに適しています。私は通常、新しい.h/.mファイルペア(MyCategories.h/MyCategories.m)を作成します。このファイルには、どこからでも必要な一般的なカテゴリが含まれています。

MyCategories.h:

@interface UIColor (MyCategory) 

+ (UIColor *)customRedColor; 

@end 

MyCategories.m

@implementation UIColor (MyCategory) 

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

@end 

あなたがそれを必要な場所あなたは.hファイルをインポートするか、またはあなたのMyAppをプレフィックスにインポートを固執することができます。 pchファイル。

+0

私は、 + CategoryNameのようにカテゴリファイルに名前を付けることをお勧めします。たとえば、UIColor + CustomColorsのように、プロジェクトの編成に非常に役立ちます。 –

関連する問題