ios - 如何以编程方式和动态地为 UIButton 的背景图像着色?

标签 ios objective-c cocoa uibutton uisegmentedcontrol

我正在开发一个应用程序 - 或者更确切地说,我正在开发一些可重复使用的“框架”,一旦它运行起来我很乐意分享。在此应用程序中,用户应该能够从颜色主题列表中进行选择。因此,应用程序必须能够以某种相当动态的方式为其 UI 元素着色。

对于按钮,所有着色都不起作用。必须在此处提供适当着色的背景图像。但是为每个人准备一组背景图片只是次优的选择。它不够动态和灵活。

最终,解决方案可能归结为为选定状态和正常状态提供一个单色(灰色)渐变图像,并使用 CoreGraphics 或 OpenGL 以编程方式为该图像着色。但坦率地说,我不知道从哪里开始。渐变应该是什么样子,然后我将如何以编程方式将其着色为任何给定颜色?

几乎适用于 UISegmentedControls,只是稍微复杂一点。 :) 任何涵盖 UISegementedControls 的通用解决方案也受到高度赞赏。

最佳答案

在 iOS7 中,您可以将方法 imagedWithRenderingMode: 与方法 setTintColor: 结合使用

但是,请务必使用 UIImageRenderingModeAlwaysTemplate,因为它会将 UIImage 上的所有非透明颜色替换为淡色。默认为 UIImageRenderingModeAutomatic

UIImageRenderingModeAlwaysTemplate

Always draw the image as a template image, ignoring its color information.

objective-C :

UIImage * image = [myButton.currentImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[myButton setImage:image forState:UIControlStateNormal];

swift :

let image = myButton.currentImage?.withRenderingMode(.alwaysTemplate)
myButton.setImage(image, for: .normal)

关于ios - 如何以编程方式和动态地为 UIButton 的背景图像着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14511639/

相关文章:

c# - MonoTouch 对话框自定义字体

ios - 将 UIView 旋转 360 度或更多

ios - 在 Swift 中的 sendSynchronousRequest 方法中传递子类变量

objective-c - 如何将十六进制值分配给 objective-c 中的变量

objective-c - 附加到 NSString 时应该使用中间临时变量吗?

macos - NSResponder resignFirstResponder 在错误的对象上触发

ios - 创建核心数据实体期间的疯狂

ios - 我如何在 iOS 中将 NSNumber 转换为 ABRecordID

ios - 在 Swift 中自定义 AdColony V4VC 弹出菜单

iphone - isKindOfClass 和 NSStringFromClass 不同意 UIApplicationDelegate