2012-05-17 89 views
1

對不起,如果這是一個壞問題,但。 。 。#define指令說明

我想創建一個快捷方式到我的UIColor看起來像這樣

[UIColor colorWithRed:(88.0f/255.0f) green:(201.0f/255.0f) blue:(234.0f/255.0f) alpha:1] 

我可以使用#定義爲,不知怎的,這樣我就可以只需鍵入一些快捷方式?我已經嘗試過了,但我認爲我的符號可能會關閉。 。 。

如果#define僅用於常量或由於某種原因不適用於這種情況,還有其他方法可以使該方法快捷嗎?

謝謝!

回答

4

#define只是一個美化文本替換系統。如果定義是這樣的:

#define key value 

則預處理器將取代key每一次出現value甚至在編譯器可以做任何事情。所以你定義的內容並不重要。你可以使用任何東西作爲你的價值,所以你可以做這樣的事情

#define kMyColor [UIColor colorWithRed:(88.0f/255.0f) green:(201.0f/255.0f) blue:(234.0f/255.0f) alpha:1] 

但在這種情況下,你應該使用一個靜態常量變量:

static const UIColor *myColor = [UIColor colorWithRed:(88.0f/255.0f) green:(201.0f/255.0f) blue:(234.0f/255.0f) alpha:1]; 
+0

'myColor'將有被分配到一個方法或函數的內部,但這肯定比定義看起來像一個常量但實際上是一個調用要好。 –

4
#define RGBA(r,g,b,a) [UIColor colorWithRed:(r) green:(g) blue:(b) alpha:(a)] 

這一翻譯使用:

[UIColor colorWithRed:(88.0f/255.0f) green:(201.0f/255.0f) blue:(234.0f/255.0f) alpha:1] 

使用此項:

RGBA(0.35,0.79,0.92,1) 

看看本教程: UIColor Shortcuts

3

在UIColor上創建一個類別並定義一個新的類方法(如blackColor,whiteColor等)。這樣你的代碼至少可以適應現有的風格。

+(UIColor*)myColor 
{ 
    return [UIColor colorWithRed:(88.0f/255.0f) green:(201.0f/255.0f) blue:(234.0f/255.0f) alpha:1]; 
} 
+0

請參閱我的答案類似,但更動態的方法 – vikingosegundo

+0

@vikingosegundo非常好的主意! – jrturton

4

通過你的問題的文字是真不明白,你要什麼樣的快捷方式 - 一個單一的顏色,創造的RGBA顏色與值[0..255]

DrummerB回答了第一個,Justin Boo第二個。

我想提出一個解決方案,適合兩種:

創建類別,可以涵蓋

  • [UIColor colorWith255ValuesWithRed: 128 green: 35 blue: 40 alpha:255],一個包裝的方法,使用的是現在
  • 創建UIColor類的方法,它將UIColor對象存儲在一個靜態的NSMutableDictionary中,它們的名稱和計數器部分,你可以調用如[UIColor registeredColorWithName:@"activeForegroundColor"]

我寫了一個顏色寄存器想法的示例代碼:

UIColor + Register。ħ

#import <UIKit/UIKit.h> 

@interface UIColor (Register) 
+(void)registerColor:(UIColor *)color 
      forName:(NSString *)name; 

+(UIColor *)registeredColorForName:(NSString *)name; 

+(void)unregisterColorForName:(NSString *)name; 
@end 

的UIColor + Register.m

#import "UIColor+Register.h" 

@interface UIColor (RegisterPrivate) 
+(NSMutableDictionary *)colorRegister; 
@end 

@implementation UIColor (RegisterPrivate) 
+(NSMutableDictionary *)colorRegister 
{ 
    static dispatch_once_t once; 
    static NSMutableDictionary *register_; 
    dispatch_once(&once, ^{ 
     register_ = [NSMutableDictionary dictionary]; 
    }); 
    return register_; 
} 
@end 


@implementation UIColor (Register) 

+(void)registerColor:(UIColor *)color 
      forName:(NSString *)name 
{ 
    [[self colorRegister] setObject:color forKey:name]; 
} 

+(UIColor *)registeredColorForName:(NSString *)name 
{ 
    return [[self colorRegister] objectForKey:name]; 
} 

+(void)unregisterColorForName:(NSString *)name 
{ 
    [[self colorRegister] removeObjectForKey:name]; 
} 

@end 

用法:
寄存器

[UIColor registerColor:[UIColor redColor] forName:@"activeColor"]; 
[UIColor registerColor:[UIColor grayColor] forName:@"passiveColor"]; 

訪問

[view1 setBackgroundColor:[UIColor registeredColorForName:@"passiveColor"]]; 
[view2 setBackgroundColor:[UIColor registeredColorForName:@"activeColor"]]; 

註銷

[UIColor unregisterColorForName:@"activeColor"]; 
1

這裏有一個定義HEX RGB,如果你想:

#define UIColorFromRGB(rgbValue) [UIColor \ 
colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \ 
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \ 
blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0] 

用法:

UIColor *color = UIColorFromRGB(0xe8e600); //0xe8e600 hex representation...