Cyr*_*ard 0 xcode uibutton uikit ios swift
所以,我是一个相对较新的编码员,并且知道这可能是一个真正简单的修复,但我似乎无法在任何地方找到它是如何发生的,只是人们知道它会发生。我也可能误解了其他一些核心思想,这就是为什么我似乎无法修复。
我在故事板中设置了一个 UIKit 按钮,在我的脚本中为此按钮添加了 IBAction 和 IBOutlet(类?无论项目中调用哪个单独的 .swift 文件),将 IBO 设置为从 UIButton 继承,所有这些都在ViewController 类。在 viewDidLoad 函数中我有
button.setImage(UIImage (named: "logo"), for: .normal)
和另一行与 UILabel 有关的编码器(那里一切都很好)。在 viewDidLoad 函数下面,我有一个数组,然后是 IBA,其中有一些代码可以对数组进行洗牌,并将 0 索引点吐出到屏幕上。
我已经尝试解决这个问题几天了,假设我已经理解了我读过的所有内容,我了解到 UIImages 是不可变的(无法更改),所以这告诉我需要解决这个问题在 viewDidLoad 中声明它时。我还了解到,当前 swift/xcode 状态下默认为蓝色,这是渲染模式问题,只需将其关闭即可解决问题。我一生都无法连接最后几个点并弄清楚如何实际告诉 Xcode 仅使用我提供的图像。
当然,我正在寻找一个代码解决方案,但是关于它为何有效的知识以及对我认为我所学到的内容的任何更正/澄清将更加感激,这样我将来可以为自己提供更多帮助。
先感谢您。-赛尔
由于您尚未指定,我假设故事板中按钮的“类型”设置为“系统”(在故事板中拖出新按钮时的默认按钮类型UIButton)。
默认情况下,系统按钮采用其上设置的任何图像,并对其应用模板渲染模式,这使得图像将所有非透明像素渲染为平面颜色(例如,本例中按钮的色调颜色,默认情况下为您看到的系统蓝色)。
UIImage默认情况下, s 有一个renderingModeof automatic,这意味着图像采用的实际有效渲染模式由使用该图像的任何内容决定(在本例中为 )UIButton。
但是,您可以使用 of 实例化 a UIImage,renderingMode这样alwaysOriginal它就不会被视为模板图像。有几种方法可以做到这一点。
您可以通过获取已经创建的图像,在代码中创建具有新渲染模式的新图像对象:
UIImage(named: "logo")
Run Code Online (Sandbox Code Playgroud)
并调用withRenderingMode(_:)它返回一个新UIImage对象,然后在按钮上设置该对象:
let logoImage = UIImage(named: "logo")
let logoImageAlwaysOriginal = logoImage?.withRenderingMode(.alwaysOriginal)
button.setImage(logoImageAlwaysOriginal, for: .normal)
Run Code Online (Sandbox Code Playgroud)
比上述编程路线更简单的方法是仅更改资产目录中图像的默认渲染类型。单击资产目录中要更改的图像(在本例中为“徽标”),然后转到属性检查器(键盘快捷键:选项+命令+4),并将“渲染为”属性更改为“原始图像” ”。现在,每当您使用或从资产目录(无论是在故事板中还是在代码中)获取此图像时,该图像都将具有.alwaysOriginal.
您可以执行上述任何选项并保留系统按钮类型,或者您可以在情节提要中将按钮类型更改为“自定义”,因为默认情况下自定义按钮不会对其图像应用模板渲染模式。但是,当不使用系统按钮类型时,您会失去一些好的东西,例如文本颜色不再取自按钮的色调颜色,并且按钮在未按下时没有漂亮的淡入淡出动画。
| 归档时间: |
|
| 查看次数: |
1386 次 |
| 最近记录: |