2014-11-21 1 views
0

iOS 앱을 개발 중입니다. 앱의 기본 색상 (및 상태 표시 줄 색상)은 사용자가 선택할 수 있습니다. 상태 표시 줄의 흰색 또는 검정색 텍스트 색상이 RGB 또는 HEX 색상에서 시작하는 것이 더 나은지 계산할 수있는 함수가 있습니까?상태 표시 줄의 올바른 텍스트 색을 프로그래밍 방식으로 계산하는 방법은 무엇입니까?

+0

그렇다면 앱의 주요 기능을 쓰길 원하십니까? 이와 같은 질문을하는 데는 아무 문제가 없지만 다음 번에 시도 할 수있는 코드 스 니펫을 제공해주십시오. – ArtSabintsev

+0

나는 그것을 요구하지 않고있다. @ 머디가 내 질문에 완벽하게 물었다. – fustalol

+0

제 사과 - 귀하의 질문에 대한 표현이 나 혼란 스러울 수 있습니다. 다행스럽게 대답을 얻었습니다! 행운을 빕니다! – ArtSabintsev

답변

3

다음은 내가하는 일입니다. 요약하면 - 색상의 RGB 값을 가져옵니다. 그런 다음 RGB 값에서 그레이 스케일 값을 계산하십시오. 그런 다음 그레이 스케일을 기반으로 상태 표시 줄 스타일을 선택하십시오.

1 단계 - UIColor에서 RGB 값을 얻을 : - :

CGFloat gray = 0.299 * red + 0.587 * green + 0.114 * blue; 

3 단계 - 상태 표시 줄 스타일을 선택

UIColor *color = // your color 
CGFloat red, green, blue, alpha; 

if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) { 

    CGFloat white; 
    if ([color getWhite:&white alpha:&alpha]) { 
     red = green = blue = white; 
    } else { 
     NSLog(@"Uh oh, not RGB or grayscale"); 
    } 
} 

2 단계 RGB 값에서 회색 값을 계산 :

UIStatusBarStyle style = gray > 0.6 ? UIStatusBarStyleDefault : UIStatusBarStyleLightContent; 

일반적으로 0.6의 사용이 작동합니다. 취향에 맞게 조정할 수 있습니다.

+0

와우 맨, 감사합니다! 왜 정확히 0.299, 0.587 및 0.114 mololyplicator 물어 봐도 될까요? – fustalol

+0

이것은 RGB 값을 그레이 스케일로 변환하는 표준 수식입니다. 나는 그것을하지 않았다. – rmaddy

+0

아, 고맙습니다. 아직 눈치 채지 못했습니다 :) – fustalol

0

체크 아웃이 링크 Check if UIColor is dark or bright?

그리고 당신은 같은 것을 사용하여 RGB 값을 찾을 수 있습니다;

const CGFloat *colors = CGColorGetComponents(self.view.backgroundColor.CGColor); 

NSLog(@"R:%f G:%f B:%f",colors[0],colors[1],colors[2]); 

다음에 따라 원하는 텍스트 색상을 계산하십시오.

관련 문제