为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文件