2010-05-26 9 views
5

Objective-C에서 임의의 색상 16 진수를 어떻게 생성합니까?Objective-C에서 임의의 색상 칸을 생성 하시겠습니까?

색상 16 진수가 필요합니다. 임의의 색상이 필요하지 않습니다. 이 화면 보호기를 작성하는 (코드 예제 포함) cocoadev에 관한 기사가있다

+2

UIColor/NSColor 또는'# abcdef' 문자열? – kennytm

+0

임의의 색상은 필요하지 않지만 실제로는 색상 16 진수 (색상과 관련이없는 용도)가 필요합니다. –

답변

18

나는 당신을 위해 일해야한다고 생각합니다. Arc4random()은 성능면에서 훨씬 우수합니다 & ... 정확도가 rand()보다 큽니다. Rand()는 사용 전에 시드 (seed)되어야합니다.

// 16777215 is FFFFFF 
NSInteger *baseInt = arc4random() % 16777216; 
NSString *hex = [NSString stringWithFormat:@"%06X", baseInt]; 

편집 : 서식 관련 의견에 따라 편집됩니다.

조금만 참고
+0

고마워요. –

+1

거의 틀림 없지만'% 06X'가 필요합니다. 그렇지 않으면'# AB'와 같은 색상을 갖게됩니다. – kennytm

+1

#를 포함시킬 필요가 있기 때문에 문자열의 서식을 지정하십시오. –

5

당신은 표준 C 사용할 수 있습니다 Objective-C 응용 프로그램의 라이브러리 루틴 rand(). 그런 다음 3 번 호출하여 임의 색상의 빨강, 녹색 및 파랑 채널 각각에 대해 임의의 값을 가져옵니다. 채널이 가질 수있는 최대 값 (일반적으로 256)을 사용하여 mod (%) 값을 지정해야합니다. 거기에서 NSColor을 적절하게 구성 할 수 있습니다.

int red = rand() % 255; 
int green = rand() % 255; 
int blue = rand() % 255; 
NSColor* myColor = [NSColor colorWithCalibratedRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:1.0]; 

이 NSColor 대신 정수의 수레 걸리기 때문에 더 나은 접근 방식은 처음부터 RAND_MAX에 의해 임의의 값을 분할하는 것입니다 :

float rand_max = RAND_MAX; 
float red = rand()/rand_max; 
float green = rand()/rand_max; 
float blue = rand()/rand_max; 
NSColor* myColor = [NSColor colorWithCalibratedRed:red green:green blue:blue alpha:1.0]; 

이 후자의 코드는 것 같은 코드가 보일 수 있습니다 색상 수를 24 비트 스펙트럼으로 제한하지 마십시오.

+0

네, 그렇지만 RGB 값만 있습니다. 16 진수 값으로 변환되지 않고 16 진수 색상 코드로 연결됩니다. OP에서 분명히 필요합니다. –

+0

예; 나는 그가 무엇을 찾고 있는지 정확히 설명하기 전에 대답을 올렸다. – fbrereto

+0

random()이 아닌 rand()를 사용하십시오. rand()의 하위 12 비트는 순환 패턴을 거칩니다. 또한'rand() % 255'는 0에서 254 사이의 숫자를 제공합니다. – JeremyP

0

: 필요에 따라

, 그것은 당신이 그리 임의의 색상 생성기를 작성 고려해야 할 가능성이 있습니다. (예를 들어, 생성 된 색상의 가시성을 위해 "규칙"을 설정하려는 경우) HSB에서 임의 생성 값을 제한하여 색상 코드를 가져올 필요가있을 수 있습니다.

관련 문제