2012-09-15 32 views
4

我在iOS 5應用程序中爲主題支持創建了幾個類。我的主題存儲在plist中,並將它們加載到一個Theme對象中,我用它來初始化各種控件。我保存的顏色作爲我的主題字符串,然後我用這個代碼把它們轉換成的UIColor:- [UICIColor colorSpaceName]:發送到實例的無法識別的選擇器

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

這適用於大多數的控制,但是當我嘗試設置導航欄這樣的色調顏色:

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

我得到這個異常:

-[UICIColor colorSpaceName]: unrecognized selector sent to instance 

當我初始化而不能使用CIColor如像這樣:

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

所有的作品都很棒。

任何線索是什麼造成這種情況?我找不到有關UICIColor的更多信息,但我猜測,因爲UIColor只是CGColor或CIColor的封裝,所以存在實現差異。

+0

有趣的問題。我想知道,如果你使用UIColor * color = [[UIColor alloc] initWithCIColor:[CIColor colorWithString:@「0.5 0.5 0.5 1.0」]];你會得到相同的結果嗎? – Darren

+0

你有沒有添加CoreImage Framework並檢查@Darren建議的內容。對我來說工作很好.. –

+0

是的,我把項目中的CI包含在內,我也試着明確地分配它。除了當我想設置導航欄顏色時,它可以用於任何其他用途...去圖。 – mishod

回答

-1

UIColor定義iOS 2.0,因爲[UIColor colorWithCIColor]轉換爲iOS5.0,我認爲蘋果轉換錯誤,你可以使用下面的代碼:

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]]; 
+3

這根本沒有意義。 – Popeye

+0

是的,這整個事情沒有意義,但使用這個解決方案解決了我的應用程序崩潰。我喜歡這個解決方案,而不是手動解析colorString的解決方案。 –

1

我有類似的問題與

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

雖然我找了一個優雅的定爲這,到底我該停止的問題,使我的應用程序與之前完全相同,繼續解決落戶。

我的顏色字符串是相同的格式,你的:

"0.5 0.7 0.2 0.75" 

我發現修復它只是做以下最簡單的方法:

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

手動分裂出來的每個值和然後將其放入colorWithRed:代碼中。

這意味着你可以保留你的顏色字符串,但擺脫引起所有崩潰的有問題的colorWithString代碼。

希望這會有所幫助

相關問題