我已经为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上运行良好。
任何线索?
我创建了一个包含3个红色图像的示例项目,其中一些WTF因子显示为蓝色。在此处下载项目:http://www.fileswap.com/dl/RVf7UuwKhf/
答案 0 :(得分: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没有说明如何确定上下文,但我希望它为控件选择template
,为normal
等选择UIImageView
。