我正在尝试在旧系统上支持10.9中新添加的NSColor方法。在10.9之前,我将它们放在一个类别中,这样可以统一Mac和iOS之间的代码。现在10.9有了这些方法,在使用它们时会出现奇怪的绘图问题。我想动态地将这些方法添加到旧的运行时中,我已经找到了几个使用class_addMethod的方法来实现。问题是,即使addMethod返回成功,这些方法也不会被调用。
NSColor *
fColorWithWhite(id self, SEL _cmd, float white, float alpha) {
return [NSColor colorWithDeviceWhite: white
alpha: alpha];
}
NSColor *
fColorWithRedGreenBlue(id self, SEL _cmd, float red, float green, float blue, float alpha) {
return [NSColor colorWithDeviceRed: red
green: green
blue: blue
alpha: alpha];
}
+ (void)addLegacySupport {
Class class = NSClassFromString(@"NSColor");
BOOL success = class_addMethod(class, @selector(colorWithWhite:alpha:), (IMP)fColorWithWhite, "@@:ff");
NSLog(@"colorWithWhite:alpha: - %i", success);
success = class_addMethod(class, @selector(colorWithRed:green:blue:alpha:), (IMP)fColorWithRedGreenBlue, "@@:ffff");
NSLog(@"colorWithRed:green:blue:alpha: - %i", success);
}
任何指针都将受到高度赞赏。