Rgb (34, 34, 34) в UIColor

У меня есть строка RGB в форме rgb(34, 34, 34). Я хочу проанализировать его с помощью UIColor с помощью iOS. Я считаю, что для этого мне нужно регулярное выражение, но я не могу его взломать. Это то, что у меня есть до сих пор.

NSString *regExString = @"(.*?)rgb\((\d+), (\d+), (\d+)\)";

NSError *error = nil;

NSRegularExpression *regEx = [NSRegularExpression regularExpressionWithPattern:regExString
                                                                       options:NSRegularExpressionCaseInsensitive error:&error];

NSArray *matches = [regEx matchesInString:backgroundColorString options:NSRegularExpressionCaseInsensitive
                                        range:NSMakeRange(0, backgroundColorString.length)];

Если бы кто-нибудь мог отправить меня в правильном направлении, это было бы здорово.

Ответ 1

UIColor использует 0-1 вместо 0-255, поэтому вам просто нужно преобразовать его так:

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

Обновление

После повторного чтения вашего вопроса я понял, что ваша реальная проблема заключается не в преобразовании в UIColor, а в получении значений. Я мало знаю о регулярном выражении, но NSScanner - это простой объект Objective-C, который может делать то же самое, хотя и более подробное. Попробуйте это для размера. Я уверен, что могут быть лучшие способы даже, возможно, более эффективное использование самого NSScanner, но это определенно работает и будет работать для любых значений int, которые проходят через.

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];

Ответ 2

Зачем использовать регулярное выражение?

Просто используйте проценты 255:

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

Тада!

Ответ 3

Я сделал это простым, используя макрос препроцессора.

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

как использовать:

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

Я всегда оставляю этот код в своих проектах iOS.