¿Existe un método convencional para invertir los valores de NSColor?

Estoy buscando una manera de invertir arbitrariaNSColor valores en tiempo de ejecución, y no parece haber ningún método incorporado para hacerlo.

Estaré usando una categoría para extenderNSColor como sigue:

NSColor * invertedColor = [someOtherColor inverted];

Aquí está la categoría de prototipo de método que estoy usando:

@implementation NSColor (MyCategories)
- (NSColor *)inverted
{
    NSColor * original = [self colorUsingColorSpaceName:
                      NSCalibratedRGBColorSpace];
    return ...?
}
@end

¿Alguien puede llenar los espacios en blanco? Esto no tiene que ser perfecto, pero me gustaría que tuviera algún sentido. es decir.:

[[[NSColor someColor] inverted] inverted] daría como resultado un color muy cercano al color original

[[NSColor whiteColor] inverted] estaría muy cerca de[NSColor blackColor]

Los colores invertidos estarían en lados opuestos de larueda de color. (rojo y verde, amarillo y violeta, etc.)

El valor alfa debe permanecer igual al original.NSColor. Sólo estoy buscando invertir elcolor, no la transparencia.

ACTUALIZACIÓN 3: (ahora en color!)

Resulta que usar unaColor complementario (un color con un tono a 180 ° del tono original) no es suficiente, ya que el blanco y el negro no tienen realmente un valor de tono. A partir de la respuesta proporcionada porFebo, esto es lo que se me ocurrió:

CGFloat hue = [original hueComponent];
if (hue >= 0.5) { hue -= 0.5; } else { hue += 0.5; }
return [NSColor colorWithCalibratedHue:hue
                            saturation:[original saturationComponent]
                            brightness:(1.0 - [original brightnessComponent])
                                 alpha:[original alphaComponent]];

El tono sigue girando 180 °, pero también invierto el componente de brillo para que los colores muy oscuros se vuelvan muy brillantes (y viceversa). Esto se encarga de los casos en blanco y negro, pero invierte casi todos los colores a negro (lo que viola mi regla de doble inversión). Aquí están los resultados:

muestra de color # 1 http://img29.imageshack.us/img29/8548/invert1.jpg

Ahora,Enfoque de Peter Hosey Es mucho más simple, y produce mejores resultados:

return [NSColor colorWithCalibratedRed:(1.0 - [original redComponent])
                                 green:(1.0 - [original greenComponent])
                                  blue:(1.0 - [original blueComponent])
                                 alpha:[original alphaComponent]];

muestra de color # 2 http://img29.imageshack.us/img29/1513/invert2.jpg

en Swift 4.2:

extension NSColor {

    func inverted() -> NSColor? {
        return NSColor(calibratedRed: 1.0 - redComponent,
                               green: 1.0 - greenComponent,
                               blue: 1.0 - blueComponent,
                               alpha: alphaComponent)
    }
} 

Respuestas a la pregunta(3)

Su respuesta a la pregunta