このようなことをしたいのですが、協調的な構文を得ることができません。
static const UIColor *colorNavbar = [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0];
マクロを定義できると思いますが、見苦しいです。
この種の新しいメソッドを使用してクラスを拡張するために、カテゴリを使用するのが好きです。これが、今日書いたばかりのコードの抜粋です。
@implementation UIColor (Extensions)
+ (UIColor *)colorWithHueDegrees:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness {
return [UIColor colorWithHue:(hue/360) saturation:saturation brightness:brightness alpha:1.0];
}
+ (UIColor *)aquaColor {
return [UIColor colorWithHueDegrees:210 saturation:1.0 brightness:1.0];
}
+ (UIColor *)paleYellowColor {
return [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
}
@end
これで、コードで次のようなことができます。
self.view.backgroundColor = highlight? [UIColor paleYellowColor] : [UIColor whitecolor];
自分で定義した色は、システム定義の色とぴったり合っています。
(ちなみに、色に注意を払うにつれて、RGBよりもHSBの観点で考えるようになりました。)
値の事前計算に関する更新:私の考えでは、価値がないということです。ただし、本当に必要な場合は、静的変数を使用して値をメモできます。
+ (UIColor *)paleYellowColor {
static UIColor *color = nil;
if (!color) color = [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
return color;
}
マクロにメモ化を行わせることもできます。
通常、プロジェクトごとにUIColorのカテゴリを作成します。
@interface UIColor (ProjectName)
+(UIColor *) colorForSomeTable;
+(UIColor *) colorForSomeControl;
+(UIColor *) colorForSomeText;
@end
実装の定数を使用する場合:
@implementation UIColor (ProjectName)
+(UIColor *) colorForSomeTable { return [UIColor colorWithRed:...]; }
@end
必要に応じて、UIFontとUIImageについても同じことを行います。
次のような同様の定数を「定義」できます。
#define FAV_COLOR [UIColor colorWithRed:24/255.0f green:89/255.0f blue:36/255.0f alpha:0.9]
定数で慣れているように名前で呼び出します:FAV_COLOR
お役に立てば幸いです。
値を事前計算する(または一度だけ実行する)場合に、jasoncrawfordの答え(これをコメントとして入れますが、コメント内のコードをフォーマットすることはできません)を拡張するため。
+ (UIColor *)paleYellowColor
{
static UIColor* paleYellow = nil;
if (paleYellow == nil)
{
paleYellow = [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
}
return paleYellow;
}
元のアイデアが機能しないのは、コンパイラが関数以外の初期化子しか使用できず、通常のコードを使用できないためです。 initialize methosdで望みのようなものを達成できたかもしれません。
static UIColor* colorNavBar = nil;
+(void) initialize
{
if (colorNavBar != nil)
{
colorNavBar = ....
}
}
注意:const
は不変であるため、元の定義のUIColor
修飾子は冗長です。
あなたはこれを行うことができます:
#define backgroundColorApp [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0]
Swiftで:拡張機能を定義する
extension UIColor {
class func XXXWhiteColor() -> UIColor {
return UIColor(red: 256, green: 256, blue: 256, alpha: 1.0)
}
class func XXXGreenColor() -> UIColor {
return UIColor(red: 73/255.0, green: 212/255.0, blue: 86/255.0, alpha: 1.0)
}
}
次のように使用します:Label.background = UIColor.XXXWhiteColor()
#define textColorApp [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0]
myLabel.textColor=textColorApp;
以下のマクロを定数ファイルで定義し、RGB値のみを渡し、任意の場所で使用するだけです
#define RGBCOLOR(r,g,b)[UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1]
使用するために:
[lblCount setTextColor:RGBCOLOR(236, 43, 92)];
また、めったに語られないもう1つのすばらしい機能、カラーリテラルについても言及する価値があると思います。読みやすいだけでなく、編集も非常に簡単です。 Swiftでは、
let color: UIColor = #colorLiteral(red: 0.9607843137, green: 0.4784313725, blue: 0.3215686275, alpha:
Xcodeに貼り付けると、この構文は単純なカラーボックスを作成します。 例を見るにはここをクリック
ボックスが表示されたら、ダブルクリックして簡単に編集できます。同様に、デザイナーから色の16進値の特定のリストがある場合は、 RGB Sliders を含むさまざまなIBオプションを切り替えることができます。