1

我为 iOS 6 编译了这个应用程序。这是从 iOS 4.3 升级的代码,在那里运行良好。

创建分段控件后,其图标只是alpha通道,控件是透明的。

这就是我创建它的方式

// images is a NSArray of images. I have confirmed. 
// All images are OK and are loading fine on this array. 
// Images have alpha channel. They are basically solid
// rounded icons with shadows surrounded by transparent pixels
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:images];
[segmentedControl addTarget:self action:selector(change:)
           forControlEvents:UIControlEventValueChanged];
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;

这就是我对控件的看法。请注意与 Alpha 通道上的图标阴影对应的模糊蓝色右边框。此外,另一个问题是它是蓝色的。我从未在此控件上调整过任何蓝色。这在 iOS 4.3 上运行良好。

有什么线索吗?


编辑:只要我用文本替换图像,分段控制就会正确渲染:不透明且永远没有蓝色。现在WTF级别增加了。

我创建了一个示例项目,其中包含 3 个红色图像,某些 WTF 因子显示为蓝色。在此处下载项目: http ://www.fileswap.com/dl/RVf7UuwKhf/

在此处输入图像描述

4

1 回答 1

4

iOS7 引入了一个新的图像选项 ( UIImageRenderingMode)。此选项的作用是指定是否将图像视为模板。

如果图像处于模板“模式”,则非透明部分会被着色(默认颜色tint是全局颜色,以匹配您的应用程序的所有颜色,从而为整体控件提供一致的主题)。

解决方案只是将您的图像指定为,original而不是template像这样:

UIImage *a = [[UIImage imageNamed:@"ITEAM-icon157.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *b = [[UIImage imageNamed:@"ITEAM-icon159.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *c = [[UIImage imageNamed:@"ITEAM-icon160.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

当然,如果您只想使用segmentedControl带有红色图标的红色,您可以tintColor像这样设置控件的

segmentedControl.tintColor = [UIColor redColor];

最后一点,还有第三个选项称为UIImageRenderingModeAutomatic,其中图像会根据使用图像的上下文自动被视为模板/正常。尽管 Apple 没有说明上下文是如何确定的,但我希望它选择templatecontrol 和normalfor UIImageViews 等。

您可以在此处找到相关文档

于 2013-10-17T09:41:18.990 回答