12

の形式のRGB文字列がありますrgb(34, 34, 34)UIColoriOSを使用して解析したい。これには正規表現が必要だと思いますが、それを解読することはできないようです。これは私がこれまでに持っているものです。

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

誰かが私を正しい方向に送ることができれば、それは素晴らしいことです。

4

3 に答える 3

29

UIColorは0-255システムではなく0-1を使用するため、次のように変換する必要があります。

[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];
于 2012-12-12T15:44:16.140 に答える
4

なぜ正規表現を使用するのですか?

255のパーセンテージを使用するだけです。

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

多田!

于 2012-12-12T15:45:25.623 に答える
0

プリプロセッサマクロを使って簡単にしました。

#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プロジェクトに残しています。

于 2014-03-05T03:47:16.497 に答える