我遇到了使用自定义颜色的UIBarButtonItem
的问题。 “网络上的所有内容似乎表明,缺乏官方API支持的唯一方法是围绕图像的使用。在为iOS 4之前的设备开发时,这一切都很好,但是在使用新的iPhone 4时除外。为iPad和iOS 4之前的设备创建图像非常简单,但为这些设备开发的图像在iPhone上看起来非常可怕4.我怀疑随着下一代设备的推出,这个问题会进一步加剧。
考虑以下示例。请注意默认彩色按钮是如何漂亮和流畅的,但iPhone 3GS图像看起来很糟糕。对于不同分辨率的设备,它必须包含多个图像,似乎不太可扩展(双关语)。
如果没有用于更改UIBarButtonItem
颜色的官方API,那么有哪些策略可用于创建可针对不同分辨率设备进行扩展的图像?这个问题对于UIBarButtonItems来说并不是唯一的,社区如何适应其他位图的UI元素?对于这种特殊情况,是否有比使用图像更好的解决方案(例如使用Quartz绘制它)?
如果可能,请提供具体的代码示例。
答案 0 :(得分:8)
您可以将任何图像列为Image@2x.png以及Image.png,系统将在运行时选择合适的图像。
答案 1 :(得分:1)
如果查看Three20的来源,您可以看到他们如何绘制自定义按钮和形状,无论分辨率如何都能很好地缩放。
答案 2 :(得分:1)
尝试不透明度(适用于Mac)。使用矢量元素和效果在其中绘制按钮,它将吐出必要的Quartz代码来重现它,在iOS应用程序中本地绘制。您自动获得Retina(@ 2x)支持。
答案 3 :(得分:0)
自从我发布这个问题已经过去了一年,但遇到了一个我希望能够做到这一点的用例,所以我决定编写一个开源应用程序而不必绘制或以其他方式创建按钮。创造它们。此应用程序使用私有API更改UIBarButtonItem
对象的颜色,然后使用图形上下文将它们保存到计算机文件系统上的确定位置。这样,您就可以在UIBarButtonItem
中使用像素完美UIToolbar
图像。
该应用程序可创建标准和@ 2x分辨率图像。
UIBarButtonItem-Generator @ GitHub
答案 4 :(得分:0)
任何矢量绘图应用程序都可以使用,但我也会考虑使用povray,它允许您使用类似C的脚本3D语言创建,然后导出您选择的任何像素大小。
答案 5 :(得分:0)
导航栏遇到同样的问题,请按以下方式解决: 首先,我将我的导航栏子类化 在这堂课里面 - (void)drawRect:(CGRect)rect { UIImage * image = [UIImage imageNamed:@“MyImage.png”];
self.frame=CGRectMake(0, 0, image.size.width, image.size.height);
self.backgroundImage =image;
}
最后用不同的分辨率保存相同的图像,最后用@ 2x