iphone - 如何复制 UINavigationBar 渐变颜色?

标签 iphone ios cocoa

我一直在尝试从 UINavigationBar 复制渐变,以用作同一 View 上自定义 UIButton 子类对象的渐变。

但是,我想不通这些颜色是怎么得来的?也就是说,您只指定一种颜色来设置 UINavigationBar 的背景颜色 - tintColor - 但它创建了一个漂亮的渐变,看起来至少有 4 种颜色?

不过,我真的只对“内部”顶部和底部颜色感兴趣 - 就在条形图周围 1px 边框内……虽然外部“边框”颜色确实看起来不同。

编辑 - 1

经过进一步研究,似乎正在操纵 HSB(而不是最初想到的 RBG)值以获得这些不同的颜色。

UIColor 上还有一个方便的方法来获取 HSB 值,这应该会有所帮助:

getHue:saturation:brightness:alpha:

到目前为止找到的有用引用资料

HSL and HSV Wiki

UIColor Class Reference

Programmatically Lighten a Color

From the book Fundamentals of Interactive Computer Graphics

编辑 - 2

如果您不知道可以通过编程方式在 UIButton 上设置背景渐变,请引用以下操作方法:

FUN WITH UIBUTTONS AND CORE ANIMATION LAYERS

Five Tips for Creating Stylish UIButtons (感谢@cdo 提供此链接)

编辑 - 3

我整理了一个电子表格,显示 UINavigationBar 及其对应的“后退”按钮(标题无关)的 HSB 值中的原始和“内部”渐变颜色(忽略最外面的颜色)并始终显示为白色)。

这是 Google 文档的链接,其中包含我为一些样本颜色收集的信息:

https://docs.google.com/spreadsheet/ccc?key=0AnKVtzkNS9scdGVRN01pa1NQcC1hdThNbEVzQU8wRlE&usp=sharing

注意:这些值是通过使用适用于 iOS 6.1 的视网膜、3.5 英寸 iPhone 模拟器(Xcode 版本 4.6)保存屏幕截图并使用 PhotoShop 滴眼 HSB 值找到的。

赏金标准

我已经就这个问题开放了一个悬赏计划,以增加对它的曝光度,并希望得到一个好的答案。我正在寻找的答案:

提供一种计算/近似(在大多数情况下)设置 tintColor 后创建的“内部顶部”和“内部底部”渐变颜色(参见电子表格)的 RGB 或 HSB 值的方法在 UINavigationBar 上。

如果您还提供一种计算“后退”按钮(类似于导航栏,但我'您是否发现这些颜色通常看起来略微“暗”)?

最佳答案

简答:不是渐变

长答案:应用色调颜色后,会在其上渲染一个透明的叠加图像。

它被称为:UITintedTopBarHighlight@2x.png,它在 UIKit 插图中。 (上传至此处:http://cl.ly/image/2c2V3t1D1T3L)

它是 2x88 像素的图像,必须在有色背景上水平重复。

对于后退按钮,它非常相似,但还有一个 mask 来赋予它形状。 UITintedBackButtonHighlight 和 UITintedBackButtonMask。

关于iphone - 如何复制 UINavigationBar 渐变颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15304629/

相关文章:

iphone - 如何在 Xcode 3.2.6 中使用较旧的 iOS 版本测试应用程序?

macos - OSx Mountain Lion ssh-askpass

objective-c - objective-c : How to know picture's inspector information

ios - 具有可调整大小图像的 UIButton setImage 与 setBackgroundImage

cocoa - NSThread和内存管理

ios - 如何使用 IMA SDK 快速播放带 MPMoviePlayerController 的前置视频广告

ios - 获取节索引路径和编辑节标题

iPhone/iOS Facebook SDK - 您可以在应用程序中登录并保留登录凭据吗?

ios - NavigationItem 按钮和 Edit mode 按钮分层次显示

ios - 使用 Soom-La 从 Unity3D 跨平台 IAP