我经常会得到模型图像,用于定义iPhone应用程序的外观。这些可以来自与项目一样多的不同方法,有时候是balsamiq甚至手绘,有时候是Photoshop。有一点很常见的是通常指定的条形色调,以匹配某些公司品牌或整体应用程序设计。
如果我在应用程序中打开其中一个设计图像并使用绘图滴管工具获取颜色的RGB值,那么有很多地方可以做到这一点,从包含按钮下边缘的最暗区域到最轻的区域酒吧顶部的区域。我找不到一个可以在编程结果与模型匹配的地方采样的地方,在某些方面总是错误导致我眯着眼睛试图调整一个或多个颜色值的两个图像,以便它们匹配得足够好。
给出一个客户想象导航栏应该如何出现的示例*,如何确定应用于条形tintColor属性的正确UIColor?
*忽略包含彩虹效果,误用渐变和其他幻想的模型。沿中心线匹配颜色和亮度就足够了。这至少是一个可辩护的立场 - “你要求的不是iOS的运作方式!”
答案 0 :(得分:5)
使用UINavigationBar / UIToolbar和三个滑块设置应用以设置tintColor
。移动滑块直到看起来正确。
如果您还以某种方式将图像带入应用程序(UIPasteboard或将其粘贴在资源中),使用-[CALayer renderInContext:]
和一些CoreGraphics魔法(kCGBlendModeDifference和一些东西来增加差异;我忘记了我使用过的东西)你可以甚至比较两个图像。
模拟器注释:首先需要将Cmd-C从Mac粘贴板“粘贴”到模拟器粘贴板中。
我发现你无法在iPhone和iPad上重现默认渐变,除了tintColor = nil
(iPad默认也没有“闪耀”)。你可以合理地接近,但是完成按钮的颜色都是错误的。
通常我会在模拟导航栏的中间进行采样。
答案 1 :(得分:3)
我没有直接答案的优秀问题,但确实有解决方案。
通常当我得到设计时,导航栏看起来并不像带有色调的iPhone导航栏。梯度通常也不同。我看待它的方式,有两种方法:
大多数时候,我的设计几乎就像设计一样,通常意味着对样本中使用的颜色进行采样,并将其用作淡色(或者稍微浅一点)。
如果我真的想要完全正确的方法是用图像替换默认的导航栏图形。
只需为UINavigationBar创建一个类别并覆盖drawRect。这种效果非常好,大多数情况下,默认按钮将是您需要的颜色,并且无需额外的工作即可融合。
在任何情况下,根据我的经验,让您的应用看起来与设计师的工作完全相同,这是很多通常被忽视的工作。但如果做得恰当,那就完全值得了。
在下面的示例中,我需要支持两个不同的导航栏查找应用程序的两个不同部分,因此我使用视图的标记属性来检查要使用的版本。
@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image=nil;
if (self.tag == 0)
image = [UIImage imageNamed: @"navBarDesign1.png"];
else if (self.tag == 1)
image = [UIImage imageNamed: @"navBarDesign2.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
答案 2 :(得分:3)
答案 3 :(得分:2)
我总是将样式设置为“Black Opaque”(如果我使用Interface Builder),然后在设计中采样最暗的颜色(通常是下边缘的区域)并将该颜色设置为色调。这给了我一些非常相似的东西,但当然不允许我控制光(反射)方面。如果客户真的想要精确的渐变,我会使用图像(不幸的是)......