为iOS6/iO7打包UINavigationBar图片资源

Posted

技术标签:

【中文标题】为iOS6/iO7打包UINavigationBar图片资源【英文标题】:Packaging UINavigationBar image resources for iOS6 / iO7 【发布时间】:2013-12-30 17:33:20 【问题描述】:

我目前开发了一个示例应用程序,我根据他们自己的视觉实体向几个实体提供白标。

由于 ios7 和 UIStatusBar 与 UINavigationBar 的合并,我必须管理很多尺寸的图像:@2x 用于视网膜,-64h 用于 iOS7(64px 高度)和经典图像。

我想同时支持 iOS 5、6 和 7。

每次我想将特定实体交付给 Photoshop 并调整 7(甚至 8,这里缺少 iPad 的 @2x)图像时,都会非常痛苦。 至少对于 Icon 图像来说,这很容易,因为无论目标操作系统或设备如何,它都是一个正方形。

用更少的图片资源打包是否更有效率?

我目前正在使用以下代码在所有应用程序中设置我的导航栏图像:

  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)

            [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar-64h.png"] forBarMetrics:UIBarMetricsDefault];

        else

            [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar.png"] forBarMetrics:UIBarMetricsDefault];

【问题讨论】:

这取决于你的形象。您是否考虑过将背景颜色设置为[UIColor colorWithPatternImage:…] 不,我必须承认我没有。我应该试一试。大多数情况下,图像由以下部分组成: - 中心的徽标 - 纯色背景色(例如没有渐变),通常是白色,有时是其他颜色(例如,在白色徽标的情况下) 例如,我想知道是否只能使用 iPad 图像,因为内容居中,而 iPad 版本只是扩展了纯色背景颜色,所以如果 iPhone 通过左右裁剪来重用它会很棒。 哦,听起来您正在寻找-[UIImage resizableImageWithCapInsets:],这将允许您将徽标放置在您想要的任何位置,并让边缘的图案调整大小以填充任何空间。 谢谢,我会更深入地研究它,如果它符合我的需要会告诉你:) 【参考方案1】:

您可以使用 -[UIImage resizableImageWithCapInsets:] 或 Xcode 5 图像切片器仅提供两个图像(常规和视网膜)。

在代码中

例如:

UIEdgeInsets insets = UIEdgeInsetsMake(1, 1, 1, 1);  // represents a 1 point (2 pixel retina) border of your background color around your logo.

UIImage *navBackgroundImage = [UIImage imageNamed:@"background"];
navBackgroundImage = [navBackgroundImage resizableImageWithCapInsets:insets];

[[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];

insets 应指示图像中不可拉伸的区域。

如果您想更好地控制徽标的位置,请将背景颜色边框设置为大于 1 磅,并调整 insets 以匹配。

如有必要,您可以根据您的设备提供不同的 insets 值。

Xcode 5 图像切片器

这段代码相当于Xcode 5的xcassets文件中的图像切片编辑器,向后兼容iOS 5according to this post。

【讨论】:

以上是关于为iOS6/iO7打包UINavigationBar图片资源的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中更改 UINavigationBar 字体

在 iOS8 中使用 clipsToBounds = YES 时,状态栏完全变黑。我该如何改变?

Unity开发小技巧Unity打包PC端exe,压缩打包为一个exe文件

python文件打包为bat用以分享

Unity开发小技巧Unity打包PC端exe,压缩打包为一个exe文件

Python打包工具Pyintealler打包py文件为windows exe文件过程及踩坑记录+实战例子