如何为UIButton着色?

时间:2008-09-23 15:09:52

标签: iphone

我正在为我的iPhone用户界面添加自定义按钮,并希望让它们具有Apple应用程序的玻璃外观。我有一个很好的默认玻璃图像,但我不想为我想要的每种色调(红色,绿色,蓝色等)都有一个单独的图像。

有没有办法加载灰度PNG并将其调整为我想要的颜色?更好的是,有没有办法让Apple的玻璃外观完全不需要加载自定义图像?

6 个答案:

答案 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)

我最终创建了自己的自定义按钮,该按钮与联系人编辑视图中“删除联系人”按钮中使用的呈现非常匹配。

对于那些感兴趣的人,可以在github上找到

PFTintedButton

答案 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。