赤/青/緑の値を取り、それらを使用して16進文字列を作成し、それを使用して色を返すカラークラスを設定しています。このように赤、青、緑の色を指定することで初期化できます
Colour *col = [[Colour alloc] initWithRed:200 Green:100 Blue:05];
このメソッドの問題は、05のような値を渡すと、0が削除され、5だけが渡されるため、青が05ではなく5に設定されることです。有効な16進数を返すメソッド文字列はこれです
-(NSString *)getHexString
{
NSString *hexString = [NSString stringWithFormat:@"#%x%x%x", iRed_i,iGreen_i,iBlue_i];
hexString = [hexString uppercaseString];
return hexString;
}
正しいカラーコードを返すには、各数値に2つの値が必要ですが、0は削除されているため、誤った色が返されます。
色を作成するために使用するもう1つの方法は、次のような16進文字列で色オブジェクトを初期化することです。
Colour *colour = [[Colour alloc] initWithHex:@"#782402"];
次に、スキャナーを使用して3つの値を次のように分離します
if ([sHex_p hasPrefix:@"#"]) sHex_p = [sHex_p substringFromIndex:1];
unsigned int outVal;
NSString *sRed = [sHex_p substringToIndex:2];
NSScanner* scanner = [NSScanner scannerWithString:sRed];
[scanner scanHexInt:&outVal];
[self setRed:outVal];
NSString *sGreen = [[sHex_p substringFromIndex:2] substringToIndex:2];
scanner = [NSScanner scannerWithString:sGreen];
[scanner scanHexInt:&outVal];
[self setGreen:outVal];
NSString *sBlue = [sHex_p substringFromIndex:4];
scanner = [NSScanner scannerWithString:sBlue];
[scanner scanHexInt:&outVal];
[self setBlue:outVal];
}
しかし、同じ問題があります。16進文字列では、最後の2つの値は02ですが、intからstringに変換すると、その0が削除されるため、2だけが渡され、色が正しくなくなります。
これを解決する最善の方法が何であるか、私は本当に確信が持てません。誰かが正しい方向を指すことができれば本当にありがたいです。
私はここでこのサイトを使用してそれをテストしています
簡単な例この16進文字列「#DB4200」を作成しようとしています。赤=219緑=66、青=00が必要です
ただし、文字列から整数に変換するときに青が0に設定されるだけで、誤った色が返されるため、16進文字列は「#DB420」になります。