我正在向我的 iPhone UI 添加自定义按钮,并希望使它们具有 Apple 应用程序的玻璃外观。我有一个很好的默认玻璃图像,但我不想为我想要的每种色调(红色、绿色、蓝色等)都有一个单独的图像。
有没有办法加载灰度 PNG 并将其调整为我想要的颜色?更好的是,有没有一种方法可以让 Apple 看起来像玻璃一样,而无需加载自定义图像?
我正在向我的 iPhone UI 添加自定义按钮,并希望使它们具有 Apple 应用程序的玻璃外观。我有一个很好的默认玻璃图像,但我不想为我想要的每种色调(红色、绿色、蓝色等)都有一个单独的图像。
有没有办法加载灰度 PNG 并将其调整为我想要的颜色?更好的是,有没有一种方法可以让 Apple 看起来像玻璃一样,而无需加载自定义图像?
有点晚了,但如果像我这样的人搜索这种信息:使用 aUISegmentedControl
和单个按钮,将其设置为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];
在一直很出色的“Cocoa With Love”网站上有一个示例:在 CoreGraphic 中绘制光泽渐变
据我所知,没有一种单一的方式,但是您可以通过采用默认灰度图像并将其与纯色合成(即在其上绘制)来获得所需的效果。如果您查看 Core Graphics 文档,您会发现有十几种不同的合成方法(例如,Color Burn),它们的某些组合可能会产生您想要的效果。
我不了解 iPhone UI,但您可以使用单个 PNG 来制作颜色变体图形。
即这些页面上的两个徽标(左上角):
使用这个PNG
替代文字 http://47degrees.com/images/logos/47_degrees.png
我想您可能需要将背景颜色设置为玻璃色。
我已经这样做了,效果很好:
但是,它是作弊,它是添加,所以对于(例如)每个像素的红色分量,R_dest = R_src + R_tint
如果您想要细粒度控制,例如,您可能希望通过平均 RGB 分量(具有适当的权重)来提取每个像素的灰度值,然后将该值乘以您的色调,因此生成的颜色将为灰度(Sr ,Sg,Sb) * {Tr,Tg,Tb}
这将需要创建一块内存,创建一个绘制到该块中的位图上下文,将您的图像绘制到该上下文中,复制整个内存块以进行保管,处理 - 从副本中获取数据并修改原始后备存储,然后从原始后备存储中提取图像并释放您分配的所有内容。
这个库已经为你做了一切,它不是最有效的方法,但它可以完成工作。iirc 他在应该使用 calloc 时使用 malloc。