テーマ用にいくつかのカスタム定義の色を使用したiPhoneアプリケーションがあります。これらの色はUIで修正されるため、含めるクラス(Constants.hおよびConstants.m)で色を定義します。それ、どうやったら出来るの? (UIColorsは変更可能であり、エラーを引き起こすため、単純に定義しても機能しません-Initalizerが一定ではありません)。
/* Constants.h */
extern UIColor *test;
/* Constants.m */
UIColor *test = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
ありがとう!
UIColorは変更できません。私は通常、色、フォント、画像を使用してこれを行います。シングルトンを使用するように簡単に変更したり、静的イニシャライザを使用したりできます。
@interface UIColor (MyProject)
+(UIColor *) colorForSomePurpose;
@end
@implementation UIColor (MyProject)
+(UIColor *) colorForSomePurpose { return [UIColor colorWithRed:0.6 green:0.8 blue:1.0 alpha:1.0]; }
@end
簡単にするために、これを行いました:
/* Constants.h */
#define myColor [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0]
「;」を省略することを忘れないでください。通常の式として使用できます。
このアプローチに技術的に何か問題があるかどうかはわかりませんが、うまく機能し、コンパイル時の定数初期化エラーを回避します-このコードは、「myColor」を配置した場所に効果的にスタックしているため、取得できません実際に使用するまでコンパイルされます。
別のオプション
あなたの.hではあなたがすることができます
extern UIColor * const COLOR_LIGHT_BLUE;
あなたの.mmであなたはできる
UIColor* const COLOR_LIGHT_BLUE = [[UIColor alloc] initWithRed:21.0f/255 green:180.0f/255 blue:1 alpha:1];//;#15B4FF
あなたが拡張機能のない速くて汚いものを探しているなら、 clang を使ってください:
#define kGreenColor colorWithRed:(0/255.0) green:(213/255.0) blue:(90/255.0) alpha:1.0
- (void)doSomething
{
_label.textColor = [UIColor kGreenColor];
}
多くの場合、ユーザーはグローバル定数をシングルトンオブジェクトに入れます-または、描かれているように、いくつかのクラスのクラスメソッドを介してそれらにアクセスできるようにすることができます。
ここに別の方法があります:
ヘッダ:
#if !defined(COLORS_EXTERN)
#define COLORS_EXTERN extern
#endif
COLORS_EXTERN UIColor *aGlobalColor;
実装:
#define COLORS_EXTERN
#import "GlobalColors.h"
@interface GlobalColors : NSObject
@end
@implementation GlobalColors
+ (void)load
{
aGlobalColor = [UIColor colorWithRed:0.2 green:0.3 blue:0.4 alpha:1];
}
@end
少しハックですが、実装で色を再定義する必要はなく、メソッドを呼び出さなくても色にアクセスできます。