Pregunta

Quiero hacer algo como esto, pero no puedo conseguir una sintaxis cooperativa.

static const UIColor *colorNavbar = [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0];

supongo que podría definir macros, pero son feas.

¿Fue útil?

Solución

Me gusta usar categorías para extender las clases con nuevos métodos para este tipo de cosas. He aquí un extracto de código que acabo de escribir hoy:

@implementation UIColor (Extensions)

+ (UIColor *)colorWithHueDegrees:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness {
    return [UIColor colorWithHue:(hue/360) saturation:saturation brightness:brightness alpha:1.0];
}

+ (UIColor *)aquaColor {
    return [UIColor colorWithHueDegrees:210 saturation:1.0 brightness:1.0];
}

+ (UIColor *)paleYellowColor {
    return [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
}

@end

Ahora en código que puede hacer cosas como:

self.view.backgroundColor = highlight? [UIColor paleYellowColor] : [UIColor whitecolor];

y mis propios colores definidos en forma directamente junto a los definidos por el sistema.

(Por cierto, estoy empezando a pensar más en términos de HSB en RGB como Presto más atención a los colores.)

Actualización de precomputen el valor: Mi corazonada es que no vale la pena. Pero si realmente quisieras, podrías memoize los valores de las variables estáticas:

+ (UIColor *)paleYellowColor {
    static UIColor *color = nil;
    if (!color) color = [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
    return color;
}

Se podría hacer una macro hacen los memoizing, también.

Otros consejos

Por lo general hacer una categoría de UIColor para cada proyecto:

@interface UIColor (ProjectName)

+(UIColor *) colorForSomeTable;
+(UIColor *) colorForSomeControl;
+(UIColor *) colorForSomeText;

@end

Con las constantes de la aplicación:

@implementation UIColor (ProjectName)

+(UIColor *) colorForSomeTable { return [UIColor colorWithRed:...]; }

@end

También hacer lo mismo para UIFont y UIImage según sea necesario.

Para ampliar la respuesta de jasoncrawford (me gustaría poner esto en modo de comentario, pero no se puede código de formato en los comentarios) si desea calcular previamente los valores (o hacerlo sólo una vez).

+ (UIColor *)paleYellowColor
{
    static UIColor* paleYellow = nil;
    if (paleYellow == nil)
    {
        paleYellow = [UIColor colorWithHueDegrees:60 saturation:0.2 brightness:1.0];
    }
    return paleYellow;
}

La razón de su idea original no funciona es porque el compilador sólo puede utilizar inicializadores fuera de funciones, no código normal. Que podría haber logrado algo así como lo que quería con la inicialización methosd por ejemplo.

static UIColor* colorNavBar = nil;

+(void) initialize
{
    if (colorNavBar != nil)
    {
        colorNavBar = ....
    }
}

Nota: el calificador const en su definición original es redundante, ya que de todos modos UIColor es inmutable.

Puede 'definir' una constante similar como esto:

#define FAV_COLOR [UIColor colorWithRed:24/255.0f green:89/255.0f blue:36/255.0f alpha:0.9]

y lo llaman por su nombre como usted está acostumbrado con constantes: FAV_COLOR

Espero que ayude.

Usted puede hacer esto:

#define backgroundColorApp [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0]

En Swift: Definir extensión

extension UIColor {

   class func XXXWhiteColor() -> UIColor {
        return UIColor(red: 256, green: 256, blue: 256, alpha: 1.0)
    }

    class func XXXGreenColor() -> UIColor {
        return UIColor(red: 73/255.0, green: 212/255.0, blue: 86/255.0, alpha: 1.0)
    }
}

Usar como: Label.background = UIColor.XXXWhiteColor ()

#define textColorApp [UIColor colorWithRed: 197.0/255.0 green: 169.0/255.0 blue: 140.0/255.0 alpha: 1.0]

myLabel.textColor=textColorApp;

Sólo definen a continuación en el archivo de macro constante y pasan único valor RGB y utilizar en cualquier lugar que desee

#define RGBCOLOR(r,g,b)[UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1]

Para usar:

[lblCount setTextColor:RGBCOLOR(236, 43, 92)];

Me siento también vale la pena mencionar otra característica impresionante que rara vez se habló de: Los literales de color. No sólo son más fáciles de leer, pero son manera más fácil de editar. En Swift,

let color: UIColor = #colorLiteral(red: 0.9607843137, green: 0.4784313725, blue: 0.3215686275, alpha: 

Cuando se pega en Xcode, esta sintaxis crea un cuadro de color simple. Haga clic aquí para ver un ejemplo.

Una vez que vea la caja, a continuación, puede hacer doble clic en él para editar fácilmente. Del mismo modo, se puede cambiar entre varias opciones IB, incluyendo RGB Sliders , si tiene una lista específica de valores hexadecimales de colores desde su diseñador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top