2009-12-24 10 views

risposta

56

si può scrivere il proprio metodo per la classe UIColor utilizzando le categorie.

#import <UIKit/UIKit.h> 
@interface UIColor(NewColor) 
+(UIColor *)MyColor; 
@end 

#import "UIColor-NewColor.h" 
@implementation UIColor(NewColor) 
+(UIColor *)MyColor { 
    return [UIColor colorWithRed:0.0-1.0 green:0.0-1.0 blue:0.0-1.0 alpha:1.0f]; 
} 

In questo modo, si crea un nuovo colore e ora si può chiamare come

[UIColor MyColor]; 

È inoltre possibile implementare questo metodo per ottenere il colore casuale. Spero che questo aiuti.

+0

Sto usando una soluzione simile ma devo chiamare qualcosa come: [[UIColor alloc] MyColor] perché funzioni. C'è un modo per non doverlo allocare? – adjwilli

+1

@adjwilli Assicurati di usare un '+' davanti alla dichiarazione del metodo, non un '-'. Questo renderà un metodo di classe rispetto a un metodo di istanza. –

2

Usa initWithRed:green:blue:alpha: o colorWithRed:green:blue:alpha:.

Ad esempio:

// create new autoreleased UIColor object named "myColor" 
UIColor *myColor = [UIColor colorWithRed:0.5f green:0.5f blue:0.5f alpha:1.0f]; 

// create new retained UIColor object named "myColor2" 
UIColor *myColor2 = [[UIColor alloc] initWithRed:0.5f green:0.5f blue:0.5f alpha:1.0f]; 
+0

Ma vorrei che mi permetterà di dire qualcosa come: UIColor * orangeColor = [UIColor alloc] initWithRed: greenLblue: alpha:] ; e poi usarlo dopo? – Jaba

+0

Sì, con la sintassi corretta. Ho aggiunto esempi di codice. Assicurati di gestire correttamente la memoria: se usi la funzione di costruzione della classe, devi conservare l'oggetto colore o impostare una proprietà mantenuta. – gerry3

7

Ci sono un paio di modi per creare un colore.

Preferisco utilizzare il metodo RGB. Se si utilizzano i valori RGB, dividerli per 255 (non ricordo perché, ma so che è necessario farlo).

float rd = 225.00/255.00; 
float gr = 177.00/255.00; 
float bl = 140.00/255.00; 
[label setTextColor:[UIColor colorWithRed:rd green:gr blue:bl alpha:1.0]]; 

Spero che questo aiuti .....

+2

I valori rosso, verde, blu e alfa passati al costruttore devono essere compresi tra 0.0 e 1.0. – gerry3

27

avevo bisogno di definire un paio di colori personalizzati per l'utilizzo in più punti in un app - ma i colori sono specifici per tale applicazione. Ho pensato di usare le categorie, ma non volevo avere file extra da includere ogni volta. Ho quindi creato un paio di metodi statici nel mio delegato App.

In MyAppDelegate.h

+ (UIColor*)myColor1; 

In MyAppDelegate.m

+ (UIColor*)myColor1 { 
return [UIColor colorWithRed:26.0f/255.0f green:131.0f/255.0f blue:32.0f/255.0f alpha:1.0f]; 
} 

Ho un metodo per colore, oppure si potrebbe fare un unico metodo e aggiungere un parametro.

posso quindi utilizzarlo in qualsiasi parte del app come questo:

myView.backgroundColor = [MyAppDelegate myColor1]; 

Spero che questo aiuta a qualcun altro.

+6

I delegati dell'app vogliono essere bravi. Ma poi apprendono cose. Imparano cose che non sanno niente di business. – griotspeak

8
[UIColor colorWithRed:51.0/255.0, green:0.0, blue:153.0/255.0]; 

Finché si utilizza un valore in virgola mobile nella vostra divisione non c'è bisogno di lanciare qualsiasi cosa. Assicurati di utilizzare valori in virgola mobile. Ad esempio: 33/255 = 0. Che diventerà nero

3

per SWIFT:

let swiftColor = UIColor(red: 1, green: 165/255, blue: 233, alpha: 1) 
8

Swift 3

Creazione di un'estensione Swift consente di definire i propri colori personalizzati e di utilizzarli come il costruito nei colori.

UIColor + CustomColor.swift

import UIKit 

extension UIColor { 

    class var customGreen: UIColor { 
     let darkGreen = 0x008110 
     return UIColor.rgb(fromHex: darkGreen) 
    } 

    class func rgb(fromHex: Int) -> UIColor { 

     let red = CGFloat((fromHex & 0xFF0000) >> 16)/0xFF 
     let green = CGFloat((fromHex & 0x00FF00) >> 8)/0xFF 
     let blue = CGFloat(fromHex & 0x0000FF)/0xFF 
     let alpha = CGFloat(1.0) 

     return UIColor(red: red, green: green, blue: blue, alpha: alpha) 
    } 
} 

Usage:

view.backgroundColor = UIColor.customGreen 

enter image description here

+0

Questo deve essere in cima all'elenco delle risposte. – amallard

Problemi correlati