5

我正在为我的 iOS 5 应用程序中的主题支持创建几个类。我的主题存储在 plist 中,然后我将它们加载到一个 Theme 对象中,我在我的应用程序中使用它来初始化各种控件。我将颜色作为字符串存储在主题中,然后使用此代码将它们转换为 UIColor:

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 之上的一个包装器,因此存在实现差异。

4

3 回答 3

3

当我尝试访问 uibutton 的 titleLabel 属性(xcode 4.5 和 IOS sdk 6.0)时,请参阅奇怪的崩溃

我找到了一种解决方法:在使用我的 colorWithCIColor 之前,我使用以下方法复制了它:

newcolor = [UIColor colorWithCGColor:newcolor.CGColor];

它解决了崩溃。反正很奇怪

于 2013-01-27T11:30:14.773 回答
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 代码。

希望这可以帮助

于 2014-11-03T23:01:45.247 回答
-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]];
于 2013-01-17T11:13:19.647 回答