为iOS6 / iO7打包UINavigationBar图像资源

时间:2013-12-30 17:33:20

标签: ios iphone uiimage uinavigationbar

我目前正在开发一个示例应用程序,我根据自己的视觉实体将白色品牌交付给多个实体。

由于iOS7以及UIStatusBar与UINavigationBar的合并,我必须管理很多大小的图像:视网膜为@ 2x,iOS7为64小时(高度为64像素),经典之一为。

我想支持iOS 5,6& 7。

每次我想为特定实体发送到photoshop并调整7(甚至8,这里缺少@ 2x for iPad)图像时,这是非常痛苦的。 至少对于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];

enter image description here

1 个答案:

答案 0 :(得分: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图像切片器

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