2012-08-09 19 views
12

Bir UIColor'un RGBA değerlerini bir veritabanında 8 karakterlik onaltılı bir dize olarak saklamanız gereken bir projem var. Örneğin, [UIColor blueColor] @ "0000FFFF" olacaktır. ben şöyle bileşen değerler elde edebilirsiniz biliyorum:Bir UIColor'u onaltılık bir dizeye nasıl dönüştürürüm?

CGFloat r,g,b,a; 
[color getRed:&r green:&g blue: &b alpha: &a]; 

ama onaltılık dizeye bu değerlerden gitmek bilmiyorum. Diğer yoldan nasıl gidileceğine dair pek çok mesaj gördüm, ancak bu dönüşüm için hiçbir şey işlevsel değil.

cevap

21

sizin yüzer sonra stringWithFormat ile biçimlendirmek, ilk int değerlerine dönüştürülür alın:

int r,g,b,a; 

    r = (int)(255.0 * rFloat); 
    g = (int)(255.0 * gFloat); 
    b = (int)(255.0 * bFloat); 
    a = (int)(255.0 * aFloat); 

    [NSString stringWithFormat:@"%02x%02x%02x%02x", r, g, b, a]; 
+0

Daha önce buna benzer öneriler denedim, ancak bu gerçekten işe yaradı. –

+0

Yöntem getRed: yeşil: mavi: alfa: yalnızca iOS 5+ üzerindedir. IOS 4'ten ne haber? – VietHung

+1

Ve ters dönüşümü yapmak için iyi bir yöntem (bir veritabanından/Çekirdek Verilerden depolama/yükleme yapıyorsanız) buradan ulaşabilirsiniz - http://stackoverflow.com/a/12397366/553394 –

14

İşte gider. Rengin onaltılık bir değeriyle NSString (ör. ffa5678) döndürür.

- (NSString *)hexStringFromColor:(UIColor *)color 
{ 
    const CGFloat *components = CGColorGetComponents(color.CGColor); 

    CGFloat r = components[0]; 
    CGFloat g = components[1]; 
    CGFloat b = components[2]; 

    return [NSString stringWithFormat:@"%02lX%02lX%02lX", 
      lroundf(r * 255), 
      lroundf(g * 255), 
      lroundf(b * 255)]; 
} 
+0

Bunu, [UIColor grayColor] '(veya RGB dışındaki herhangi bir renk) ile deneyin. Kötü sonuçlar veya olası bir çarpışma! – rmaddy

İlgili konular