我正在为我的iPhone用户界面添加自定义按钮,并希望让它们具有Apple应用程序的玻璃外观。我有一个很好的默认玻璃图像,但我不想为我想要的每种色调(红色,绿色,蓝色等)都有一个单独的图像。
有没有办法加载灰度PNG并将其调整为我想要的颜色?更好的是,有没有办法让Apple的玻璃外观完全不需要加载自定义图像?
答案 0 :(得分:7)
有点晚了,但是如果像我这样的人搜索此类信息:使用一个按钮UISegmentedControl
,将其设置为momentary
,并设置其tintColor
。这样,您就不需要准备尽可能多的PNG,并且框架会为您处理所有渲染。
示例:
UISegmentedControl *cancelButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Cancel"]];
[cancelButton setSegmentedControlStyle:UISegmentedControlStyleBar];
[cancelButton setTintColor:[UIColor colorWithRed:0.8 green:0.3 blue:0.3 alpha:1.0]];
[cancelButton setMomentary:YES];
[cancelButton addTarget:self action:@selector(didTapCancel:) forControlEvents:UIControlEventValueChanged];
[self addSubview:cancelButton];
[cancelButton release];
答案 1 :(得分:6)
在“Cocoa With Love”网站上有一个样本:Drawing gloss gradients in CoreGraphic
答案 2 :(得分:2)
我所知道的并不是单行方式,但您可以通过拍摄默认的灰度图像并将其与纯色合成(即在其上绘制)来获得所需的效果。如果您查看Core Graphics文档,可以看到有十几种不同的合成方法(例如,Color Burn),它们的某些组合可能会产生您想要的效果。
答案 3 :(得分:1)
我不了解iPhone UI,但您可以使用单个PNG来获得颜色变体图形。
即。这两个页面上的徽标(左上角):
<强> Products 强>
<强> Shops 强>
使用此 PNG
alt text http://47degrees.com/images/logos/47_degrees.png
我认为您可能需要将背景颜色设置为玻璃色。
答案 4 :(得分:0)
答案 5 :(得分:0)
我做到了这一点并且效果非常好:
iOS: Applying a RGB filter to a greyscale PNG
然而,它是作弊,它正在添加,所以对于(例如)每个像素的红色分量,R_dest = R_src + R_tint
如果您想要细粒度控制,例如,您可能希望通过平均RGB分量(具有适当的权重)来提取每个像素的灰度值,然后将此值乘以您的色调,因此得到的颜色将是灰度(Sr,Sg,Sb)* {Tr,Tg,Tb}
这需要创建一块内存,创建一个位图上下文,该内容将绘制到此块中,将图像绘制到此上下文中,复制整个内存块以便安全保存,处理 - 从副本中获取数据并修改原始支持存储,然后从原始后备存储中提取图像并释放您分配的所有内容。
Problem reconstituting UIImage from RGBA pixel byte data
这个库为你做了一切,它不是最有效的路线,但它完成了工作。 iirc他应该使用calloc时使用malloc。