所以,我是一个相对较新的编码器,并且了解这可能是一个真正简单的解决方法,但是我似乎找不到任何地方的方法,只是人们知道它的发生。我也可能误解了一些其他核心思想,这就是为什么我似乎无法解决的原因。
[我在情节提要中设置了UIKit按钮,并在脚本中为此按钮添加了IBAction和IBOutlet(类?在项目中调用单个.swift文件的方式是什么,将IBO设置为继承自UIButton,全部在ViewController类中。在viewDidLoad函数中,我有
button.setImage(UIImage (named: "logo"), for: .normal)
以及与UILabel有关的另一行编码器(一切都很好)。在viewDidLoad函数下方,我有一个数组,然后是IBA,其中包含少量代码,可以对数组进行混洗并在屏幕上吐出0个索引点。
现在我已经尝试修复了几天,并假设我已经了解了所有已读的内容,因此我了解到UIImage是不可变的(无法更改),因此告诉我需要在viewDidLoad中声明时解决此问题。我还了解到,在当前的swift / xcode状态下,默认为蓝色,这是一个渲染模式问题,只需将其关闭即可解决该问题。我一辈子都无法连接最后几个点并弄清楚如何实际告诉Xcode仅使用我提供的图像。
我当然是在寻找代码解决方案,但是对于它为什么会起作用以及对我认为所学知识的任何更正/澄清的了解将更加受到赞赏,以便将来我能为自己提供更多帮助。
谢谢你。-Cyre
由于未指定,因此我假定故事板中按钮的“类型”设置为“系统”(在故事板上拖出新的UIButton
时,默认按钮类型。
默认情况下,系统按钮会在其上设置任何图像,然后对其应用模板渲染模式,这会使图像将所有非透明像素渲染为纯色(例如,在这种情况下,按钮的色调是默认情况下,您看到的是系统蓝色)。
[UIImage
默认情况下的renderingMode
为renderingMode
,这意味着图像所采用的实际有效渲染模式取决于使用图像的对象(在此情况下为automatic
)。
但是,您可以实例化具有automatic
为UIButton
的UIImage
,因此它永远不会被视为模板图像。您可以通过拍摄已经创建的图像来在代码中执行此操作:
renderingMode
并在其上调用alwaysOriginal
以向您返回一个新的alwaysOriginal
对象,然后在按钮上进行设置:
UIImage(named: "logo")
您可以执行上述操作并保留系统按钮的类型,也可以在情节提要中将按钮的类型更改为“自定义”,因为自定义按钮确实not默认情况下将模板渲染模式应用于其图像。但是,当您不使用系统按钮类型时,会丢失一些不错的东西,例如不再从按钮的色泽中获取文本颜色,并且在未按下按钮时,按钮没有很好的淡入淡出动画。