2012-05-17 61 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...