2012-09-15 2 views
4

iOS 5 앱에서 테마 지원을위한 여러 클래스를 만듭니다. 내 테마는 plist에 저장되어 있으며 테마 객체에로드합니다.이 객체를 다양한 컨트롤을 초기화하는 데 앱에서 사용합니다. 내 테마 문자열로 색상을 저장 한 후 나는 UIColor로 변환하는 코드를 사용- [UICIColor colorSpaceName] : 인스턴스로 전송 된 인식 할 수없는 선택자

UIColor* color = [UIColor colorWithCIColor:[CIColor colorWithString:@"0.5 0.5 0.5 1.0"]]; 

이 나는 ​​등의 네비게이션 바의 색조 색상을 설정하려고하지만 경우에, 대부분의 컨트롤을 위해 잘 작동 :

-[UICIColor colorSpaceName]: unrecognized selector sent to instance 

내가 사용하지 않고 색상을 초기화하면 CIColor 예 :

//navigation bar 
[self.navigationController.navigationBar setTintColor:color]; 

나는이 예외가 like :

UIColor* color = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1.0]; 
[self.navigationController.navigationBar setTintColor:color]; 

모든 작품이 훌륭합니다.

어떤 단서가 원인입니까? 내가 UICIColor에 대한 많은 정보를 찾을 수는 없지만 UIColor는 구현상의 차이점이있는 CGColor 또는 CIColor의 맨 위에있는 래퍼이므로 추측합니다.

CIColor *ci_ = [CIColor colorWithString:colorString]; 
    UIColor *color = [UIColor colorWithRed:ci_.red green:ci_.green blue:ci_.blue alpha:ci_.alpha]; 
    // UIColor *color = [UIColor colorWithCIColor:[CIColor colorWithString:colorString]]; 
+0

흥미로운 질문입니다. UIColor * color = [[UIColor alloc] initWithCIColor : [CIColor colorWithString : @ "0.5 0.5 0.5 1.0"]] ;;를 사용하면 동일한 결과를 얻게됩니까? – Darren

+0

CoreImage Framework를 추가하고 @Darren이 제안한 것을 확인하십시오. 나를 위해 그 일하는 벌금 .. –

+0

예 프로젝트에 CI가 포함되어 있으며이를 명시 적으로 할당하려고했습니다. 그것은 navbar color ... go figure를 설정하고 싶을 때 이외의 다른 용도로도 작동합니다. – mishod

답변

-1

UIColor 때문에 iOS5.0[UIColor colorWithCIColor] 변환, 나는 사과 변환 오류, 당신은 코드 아래 사용 할 수 있다고 생각 iOS 2.0에 정의 사용하기 전에 내 colorWithCIColor로 다음과 같이 사본을 만들었습니다.

newcolor = [UIColor colorWithCGColor:newcolor.CGColor]; 

및 그것은 충돌을 해결합니다. 나는 결국, 이에 대한 우아한 수정을 찾았다하지만 이상한, 어쨌든

+3

이것은 전혀 이해가되지 않습니다. – Popeye

+0

예,이 모든 것이 의미가 없지만이 솔루션을 사용하면 앱이 다운되는 문제를 해결할 수 있습니다. 나는 당신이 수동으로 colorString을 분석하는 것보다이 해결책을 선호한다. –

1

내가 문제를 중단하고 정확하게 이전을 계속 내 응용 프로그램을 사용할 수있는 솔루션으로 정착

[UIColor colorWithCIColor:[CIColor colorWithString:color]]; 

와 비슷한 문제가 있었다 .

NSArray * colorParts = [color componentsSeparatedByString: @" "]; 

CGFloat red = [[colorParts objectAtIndex:0] floatValue]; 
CGFloat green = [[colorParts objectAtIndex:1] floatValue]; 
CGFloat blue = [[colorParts objectAtIndex:2] floatValue]; 
CGFloat alpha = [[colorParts objectAtIndex:3] floatValue]; 

UIColor * newColor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; 

수동으로 분할 밖으로 각 값 :

"0.5 0.7 0.2 0.75" 

내가 다음을 수행하는 것이 단지였다 해결하는 가장 쉬운 방법을 발견 :

내 컬러 문자열은 당신과 같은 형식이었다 그런 다음 colorWithRed : 코드에 넣습니다.

즉, 색상 문자열을 유지하면서 모든 충돌을 일으키는 문제가있는 colorWithString 코드를 제거 할 수 있습니다.

희망이 있습니다.

관련 문제