使用iOS类别创建新颜色

One*_*nDc 5 categories uicolor ios

我想创建一些UIColor在我的应用程序中使用的新s.RGB有时会略微调整(确切的色调正在争论中)

目前我必须从RGB创建新的颜色,代码遍布并重复.

有没有更好的方法,我可以创建一个新的颜色,并通过我的应用程序使用它.

[UIColor myNewCustomRedColor]
Run Code Online (Sandbox Code Playgroud)

这里最好的模式是什么 - 类别是正确的选择 - 如果是这样的话?如果没有 - 建议的方法是什么.

tom*_*tom 9

类别是这样的好选择.我通常只是做一个新的.h/.M对文件,MyCategories.h/ MyCategories.m,它含有常用的要处处类别.

MyCategories.h:

@interface UIColor (MyCategory)

+ (UIColor *)customRedColor;

@end
Run Code Online (Sandbox Code Playgroud)

MyCategories.m

@implementation UIColor (MyCategory)

+ (UIColor *)customRedColor {
    return [UIColor redColor];
}

@end
Run Code Online (Sandbox Code Playgroud)

您可以在任何需要的地方导入.h文件,也可以将导入粘贴到MyApp-Prefix.pch文件中.


Ken*_*ner 5

我在其他项目中使用的一种方法是创建一个ProjectStyle.h文件,其中包含用于自定义颜色和其他样式相关常量的#defines.你只需要导入它.

就像是:

ProjectStyles.h

#define RED_HEADER_COLOR [UIColor colorWithRed:0.8f green:0.1f blue:0.1f alpha:0.9f]
#define RED_BACKGROUND_COLOR [UIColor colorWithRed:0.9f green:0.3f blue:0.1f alpha:1.0f]
#define PRIMARY_FONT [UIFont fontWithName:@"HelveticaNeue-Bold" size:12.0f]
Run Code Online (Sandbox Code Playgroud)

如果你想创建一些UIColor或UIFont对象的常量实例,你也可以有一个相应的.m文件

ProjectStyles.m

+ (UIColor *) redHeaderColor 
{  return [UIColor colorWithRed:0.8f green:0.1f blue:0.1f alpha:0.9f];  }

+ (UIColor *) redBackgroundColor 
{  return [UIColor colorWithRed:0.9f green:0.3f blue:0.1f alpha:1.0f];  }

+ (UIFont *) primaryFont
{
    static UIFont *font = nil;
    if ( font == nil )
        font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:12.0f];
    return font;
}
Run Code Online (Sandbox Code Playgroud)

然后当然暴露标题中的那些

我喜欢ProjectStyle方法的另一个方法是,经过一段时间后你会想要更多的自定义内容而不仅仅是颜色 - 自定义字体,自定义线条和阴影.使用Style类或标题来放置所有这些内容可以让您在一个地方查找已经为各种事物定义的自定义元素,以及一个非常明显的#import,供以后的编码人员自觉地集中回自定义信息.

如果您只是将自定义元素放在类别中,那么您最终会将自定义分布在多个类别中,并且还可能(大多数是远程的)类别名称与其他第三方库冲突.

  • #define是类型安全的,因为它们最终是由静态分析器和调试器以与任何其他代码相同的方式检查的真实代码(所以如果使用#define导致UIColor,但需要CGColor你会得到一个警告).编辑器还会自动填充#define代码,因此MY_COLOR.CGColor会自动填充.此外,#define项目完全自动完成 - 在您的示例中,您仍然必须输入@"ultraBlue",这会留下错误的余地.使用#define或factory方法,样式应该很容易自动完成以消除错误. (3认同)