#define指令澄清

时间:2012-05-17 17:15:02

标签: objective-c ios cocoa-touch

很抱歉,如果这是一个糟糕的问题,但是。 。 。

我想为我的UIColor创建一个看起来像这样的快捷方式

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

我可以以某种方式使用#define,以便我可以输入一些快捷方式吗?我试过了,但我觉得我的符号可能不合适了。 。 。

如果#define仅用于常量或由于某种原因在这种情况下不适用,有没有其他方法来快捷方法?

谢谢!

5 个答案:

答案 0 :(得分: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];

答案 1 :(得分:4)

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

Intead使用:

[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

答案 2 :(得分:4)

通过你的问题的文字,它不是很清楚,你想要快捷方式 - 一种颜色,RGBA颜色的创建值[0..255]

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

我想提出一个适合两者的解决方案:

创建一个可以涵盖两者的类别

  • [UIColor colorWith255ValuesWithRed: 128 green: 35 blue: 40 alpha:255],包装方法,您现在正在使用
  • 创建一个UIColor类方法,该方法将UIColor对象存储在静态NSMutableDictionary中,并带有它们的名称和计数器部分,您可以调用[UIColor registeredColorWithName:@"activeForegroundColor"]

我写了一个颜色注册理念的示例代码:

<强>的UIColor + Register.h

#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"];

答案 3 :(得分: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];
}

答案 4 :(得分: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...