2012-12-12 16 views
11

Ich habe eine RGB-Zeichenfolge in der Form rgb(34, 34, 34). Ich möchte es mit iOS zu einem UIColor analysieren. Ich glaube, ich brauche eine Regex dafür, aber ich kann es nicht knacken. Das habe ich bisher.rgb (34, 34, 34) zu UIColor

Wenn mir jemand in die richtige Richtung schicken könnte, wäre das toll.

+0

MÜSSEN Sie eine RGB-Zeichenfolge wie diese erhalten oder können Sie den tatsächlichen Wert erhalten? –

+0

Ich erhalte diese RGB-Zeichenfolge von einer API, über die ich keine Kontrolle habe. Sie liefern es leider in diesem Format. –

+0

Überprüfen Sie meine Antwort :) Hinzugefügt etwas, das hilft –

Antwort

28

UIColor verwendet ein 0-1 statt 0-255-System, so dass Sie es gerade brauchen, um zu konvertieren, wie so:

[UIColor colorWithRed:34.0/255.0 green:34.0/255.0 blue:34.0/255.0 alpha:1.0]; 

aktualisieren

Nach der erneuten Lektüre Ihrer Frage, die ich Ihren wirklichen realisiert Problem wird nicht in UIColor konvertiert, sondern die Werte erhalten. Ich weiß nicht viel über Regex, aber NSScanner ist ein einfaches Objective-C-Objekt, das dasselbe tun kann, wenn auch etwas ausführlicher. Versuchen Sie dies für die Größe. Ich bin mir sicher, dass es sogar bessere Möglichkeiten geben könnte, den NSS-Scanner selbst effizienter zu nutzen, aber das funktioniert definitiv und wird für alle int-Werte funktionieren, die durchkommen.

NSString *backgroundColorString = @"rgb(34, 34, 34)"; 

NSScanner *scanner = [NSScanner scannerWithString:backgroundColorString]; 
NSString *junk, *red, *green, *blue; 
[scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&junk]; 
[scanner scanUpToCharactersFromSet:[NSCharacterSet punctuationCharacterSet] intoString:&red]; 
[scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&junk]; 
[scanner scanUpToCharactersFromSet:[NSCharacterSet punctuationCharacterSet] intoString:&green]; 
[scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&junk]; 
[scanner scanUpToCharactersFromSet:[NSCharacterSet punctuationCharacterSet] intoString:&blue]; 

UIColor *backgroundColor = [UIColor colorWithRed:red.intValue/255.0 green:green.intValue/255.0 blue:blue.intValue/255.0 alpha:1.0]; 
+0

Das hat toll funktioniert Ryan. Danke vielmals. –

+0

Kein Problem. Glückliche Kodierung! Wenn ich eine Lösung mit Regex finde, werde ich meine Antwort aktualisieren :) –

4

Warum eine Regex überhaupt verwenden?

Verwenden Sie einfach Prozentsätze von 255:

UIColor* color = [UIColor colorWithRed:(red/255.0) green:(green/255.0) blue:(blue/255.0) alpha:1]; 

Tada!

+0

Ja, aber leider kenne ich die RGB-Werte vorher nicht. Also muss ich sie aus dieser Zeichenfolge analysieren. Ich lade diese Zeichenfolge von einem Server herunter. –

0

Ich machte es einfach mit Präprozessor-Makro.

#define UIColorMake(r,g,b)[[UIColor alloc] initWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0f]; 

wie man verwendet:

UIColor MyGreenColor = UIColorMake(31.0, 164.0, 23.0); 

ich immer diesen Code in meinem iOS-Projekte zu verlassen.

+0

Sollte es nicht 255.0 nicht 215.0 sein? –

Verwandte Themen