如何关闭与UIButton一起使用的图像上的蓝色覆盖?

问题描述 投票:-1回答:1

所以,我是一个相对较新的编码器,并且了解这可能是一个真正简单的解决方法,但是我似乎找不到任何地方的方法,只是人们知道它的发生。我也可能误解了一些其他核心思想,这就是为什么我似乎无法解决的原因。

[我在情节提要中设置了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

ios swift xcode uibutton uikit
1个回答
1
投票

由于未指定,因此我假定故事板中按钮的“类型”设置为“系统”(在故事板上拖出新的UIButton时,默认按钮类型。

默认情况下,系统按钮会在其上设置任何图像,然后对其应用模板渲染模式,这会使图像将所有非透明像素渲染为纯色(例如,在这种情况下,按钮的色调是默认情况下,您看到的是系统蓝色)。

[UIImage默认情况下的renderingModerenderingMode,这意味着图像所采用的实际有效渲染模式取决于使用图像的对象(在此情况下为automatic)。

但是,您可以实例化具有automaticUIButtonUIImage,因此它永远不会被视为模板图像。您可以通过拍摄已经创建的图像来在代码中执行此操作:

renderingMode

并在其上调用alwaysOriginal以向您返回一个新的alwaysOriginal对象,然后在按钮上进行设置:

UIImage(named: "logo")

您可以执行上述操作并保留系统按钮的类型,也可以在情节提要中将按钮的类型更改为“自定义”,因为自定义按钮确实not默认情况下将模板渲染模式应用于其图像。但是,当您不使用系统按钮类型时,会丢失一些不错的东西,例如不再从按钮的色泽中获取文本颜色,并且在未按下按钮时,按钮没有很好的淡入淡出动画。

© www.soinside.com 2019 - 2024. All rights reserved.