1

在之前的项目中,我在 AppDeligate.m 中定义了这个函数,它对应用程序的所有部分都是全局可用的:

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

现在由于某种原因,当我将此代码放在一个新项目中时,只有特定的类可以看到该功能,而子类看不到它。

如何使此功能全球可用?

4

4 回答 4

7

您可以在.pch项目文件中定义宏,但这通常不是一个好主意,因为它会产生难以阅读、维护和调试的代码。

在您的具体情况下,我宁愿在UIColor.

这是一个带有额外内容的实现,可能会派上用场。

UIColor+Extra.h

#import <UIKit/UIKit.h>

@interface UIColor (Extra)
+ (instancetype)extra_colorWith255BasedRed:(NSUInteger)red green:(NSUInteger)green blue:(NSUInteger)blue;
+ (instancetype)extra_colorWith255BasedRed:(NSUInteger)red green:(NSUInteger)green blue:(NSUInteger)blue alpha:(CGFloat)alpha;
+ (instancetype)extra_colorWithHex:(NSInteger)hex;

@end

UIColor+Extra.m

#import "UIColor+Extra.h"

@implementation UIColor (Extra)

+ (instancetype)extra_colorWith255BasedRed:(NSUInteger)red green:(NSUInteger)green blue:(NSUInteger)blue {
    return [self colorWith255BasedRed:red green:green blue:blue alpha:1.0];
}

+ (instancetype)extra_colorWith255BasedRed:(NSUInteger)red green:(NSUInteger)green blue:(NSUInteger)blue alpha:(CGFloat)alpha {
    return [self colorWithRed:red/255.0f green:green/255.0f blue:blue/255.0f alpha:alpha];
}

+ (instancetype)extra_colorWithHex:(NSInteger)hex {
    return [UIColor colorWith255BasedRed:((hex & 0xFF0000) >> 16) green:((hex & 0xFF00) >> 8) blue:(hex & 0xFF)];
}

@end

然后只需放置

#import "UIColor+Extra.h"

在您的.pch文件中并在其他地方使用它。

例子

UIColor * cyan = [UIColor extra_colorWithHex:0x00FFFF];
UIColor * magenta = [UIColor extra_colorWith255BasedRed:255 green:0 blue:255];
于 2013-08-21T10:59:43.673 回答
2

如果您将该文件添加到 YOURPROJECTNAME-Prefix.pch,它将作为预编译头文件添加,并在您的所有代码文件中可用。

于 2013-08-21T10:52:13.883 回答
0

Audun Kjelstrup 给出了最好的答案。

您还可以选择在类中设置静态方法。

+ (UIColor *)UIColorFromRGB {}
于 2013-08-21T10:56:20.150 回答
0

我同意 Gabriele 关于宏(作为函数不受欢迎)的观点,并且您尝试做的事情在一个类别中会很好/合适。但是,我还想指出,Objective-C 也可以执行 C 风格的函数(与您显示的宏相反)。

例如:

// Header
UIColor * UIColorFromRGB(NSInteger rgbValue);

// Implementation
UIColor * UIColorFromRGB(NSInteger rgbValue)
{
    return [UIColor colorWithRed: ((float)((rgbValue & 0xFF0000) >> 16))/255.0
                           green: ((float)((rgbValue & 0xFF00) >> 8))/255.0 \
                            blue: ((float)(rgbValue & 0xFF))/255.0 alpha:1.0];
}
于 2013-08-21T14:19:49.217 回答