1

对不起,如果这是一个不好的问题,但是。. .

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

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

我可以以某种方式使用#define,以便我可以输入一些快捷方式吗?我试过了,但我认为我的符号可能是 off 。. .

如果 #define 仅用于常量或由于某种原因不适用于这种情况,是否有其他方法可以简化该方法?

谢谢!

4

5 回答 5

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];
于 2012-05-17T17:20:27.073 回答
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

于 2012-05-17T17:20:37.983 回答
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"];
于 2012-05-17T17:34:56.540 回答
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];
}
于 2012-05-17T17:31:07.737 回答
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...
于 2012-05-17T17:40:07.303 回答