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

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

有帮助吗?

解决方案

我所知道的并不是单行方式,但您可以通过拍摄默认的灰度图像并将其与纯色合成(即在其上绘制)来获得所需的效果。如果您查看Core Graphics文档,可以看到有十几种不同的合成方法(例如,Color Burn),它们的某些组合可能会产生您想要的效果。

其他提示

有点晚了,但是如果像我这样的人搜索这种信息:用一个按钮使用 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];

我做到了这一点并且效果非常好:

iOS:将RGB滤镜应用于灰度PNG

然而,它是作弊,它正在添加,所以对于(例如)每个像素的红色分量,R_dest = R_src + R_tint

如果您想要细粒度控制,例如,您可能希望通过平均RGB分量(具有适当的权重)来提取每个像素的灰度值,然后将此值乘以您的色调,因此得到的颜色将是灰度(Sr,Sg,Sb)* {Tr,Tg,Tb}

这需要创建一块内存,创建一个位图上下文,该内容将绘制到此块中,将图像绘制到此上下文中,复制整个内存块以便安全保存,处理 - 从副本中获取数据并修改原始支持存储,然后从原始后备存储中提取图像并释放您分配的所有内容。

从RGBA像素字节数据重构UIImage的问题

这个库为你做了一切,它不是最有效的路线,但它完成了工作。 iirc他应该使用calloc时使用malloc。

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

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

PFTintedButton

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top