3

我遇到了使用UIBarButtonItem自定义颜色的问题。'net 上的所有内容似乎都表明,解决这种缺乏官方 API 支持的唯一方法是使用图像。在为 iOS 4 之前的设备开发时,这一切都很好而且很花哨,但使用新的 iPhone 4 时除外。为 iPad 和 iOS 4 之前的设备创建图像非常简单,但为这些设备开发的图像在 iPhone 上看起来绝对可怕4. 我怀疑这个问题会随着下一代设备的推出而进一步加剧。

考虑下面的例子。注意默认的彩色按钮是多么漂亮和平滑,但 iPhone 3GS 的图像看起来很糟糕。必须为不同分辨率的设备包含多个图像似乎不太可扩展(双关语)。

替代文字

在没有用于更改 a 的颜色的官方 API 的情况下,有UIBarButtonItem哪些策略可以创建可以很好地适应不同分辨率设备的图像?这个问题几乎不是 UIBarButtonItems 独有的,社区如何适应其他的位图 UI 元素?对于这种特殊情况,有没有比使用图像更好的解决方案(例如使用 Quartz 来绘制它)?

如果可能,请提供具体的代码示例。

4

6 回答 6

8

您可以将任何图像与 Image.png 一起列为 Image@2x.png,系统将在运行时选择适当的图像。

于 2010-06-19T16:01:36.333 回答
1

如果您查看Three20的源代码,您可以看到他们如何绘制自定义按钮和形状,这些按钮和形状可以很好地缩放,而不管分辨率如何。

于 2010-06-18T23:25:58.670 回答
1

试试不透明度(适用于 Mac)。用矢量元素和效果在其中绘制你的按钮,它会吐出必要的 Quartz 代码来重现它,在你的 iOS 应用程序中原生绘制。您会自动获得 Retina (@2x) 支持。

于 2011-03-24T18:50:18.993 回答
0

自从我发布这个问题以来已经一年多了,但是遇到了一个我希望能够做到这一点的用例,所以我决定编写一个开源应用程序来创建它们,而不是绘制或以其他方式创建按钮。此应用程序使用私有 API 来更改UIBarButtonItem对象的颜色,然后使用图形上下文将它们保存到计算机文件系统上的确定位置。这样,您就可以在sUIBarButtonItem中使用像素完美的图像。UIToolbar

该应用程序创建标准和@2x 分辨率图像。

UIBarButtonItem-Generator @ GitHub

于 2011-05-15T01:54:31.713 回答
0

任何矢量绘图应用程序都可以工作,但我也会考虑使用 povray,它允许您使用类似 C 的脚本 3D 语言创建,然后导出您选择的任何像素大小。

http://povray.org

于 2012-10-01T00:05:25.300 回答
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

于 2012-10-12T09:30:43.790 回答