Icon

RVS_MaskButton

一种允许“透视”遮罩的特殊 UIButton 变体。

概述

这个类实现了一个非常基础的 UIButton 子类按钮(因此它可以用来代替 UIButton),它提供了一个渐变背景,并且能够将其遮罩在文本内部(您可以使用任何您想要的字体),或者在模板图像内部,或者,也可以用渐变填充按钮,并“冲压”出文本和/或图像。渐变是两种颜色之间的基本线性渐变,并且可以更改渐变的角度。如果只定义了一种颜色,则填充是纯色。

它解决了什么问题?

此类是为特定用例而设计的,在一个更大的应用程序中。我们想要一个大的、横幅样式的按钮,使用特定的字体,并填充渐变。

按钮中的文本会发生变化,以反映应用程序的状态,所以图像是不可能的。 这使得拥有基于渐变的文本或模板图像显示,并具有透明背景变得极其简单。

它看起来像什么?

这是该类可以做的事情的一个小例子(来自 测试工具应用程序

图 1:基本文本按钮 图 2:反转
Figure 1 Figure 2
图 3:无边框 图 4:旋转渐变(反转)
Figure 3 Figure 4
图 5:旋转渐变(正常) 图 6:不同的字体
Figure 5 Figure 6
图 7:纯色(蓝色) 图 8:纯色(黄色)
Figure 7 Figure 8
图 9:纯色,反转,边框,图像 图 10:纯色,正常,图像
Figure 9 Figure 10
图 11:渐变,反转,边框,图像 图 12:渐变,正常,边框,图像
Figure 11 Figure 12

用法

从哪里获取

为了使用此类,您应该将其作为 Swift Package Manager (SPM) 模块安装。

您可以使用 SPM 通过引用其 GitHub Repo URI (SSH: git@github.com:RiftValleySoftware/RVS_MaskButton.git, 或 HTTPS: https://github.com/RiftValleySoftware/RVS_MaskButton.git) 将项目加载为依赖项。

安装模块后,应将其包含在需要访问它的文件中,如下所示

import RVS_MaskButton

或者,如果您设置它的唯一地方是故事板,您只需在 Interface Builder 中指定该类,并在代码中使用标准的 UIButton 引用即可。

将 RVS_MaskButton 集成到您的项目中

注意: 这是该项目的技术文档。此外,该模块旨在提供出色的 DocC 支持,并将在您的 Apple 文档窗口中显示。

此外,这里的所有示例都来自 测试工具项目,这是一个很好的示例代码来源。

通过故事板编辑器 (Interface Builder)

首先,从对象调色板中拖动一个 Button 对象到您的故事板中,并根据需要进行连接。

图 13:将 UIButton 实例拖到您的视图控制器中 图 14:设置类名
Figure 13 Figure 14

安装完成后,选择新对象,并在 Identity Inspector 中将其类设置为 RVS_MaskButton。您可能还需要将模块指定为 RVS_MaskButton

现在,切换到 Attributes Inspector

图 15:控件属性
Figure 15

我们将在下面检查每个突出显示的部分。

RVS_MaskButton 控件

顶部部分具有 RVS_MaskButton 类独有的控件

图 16:RVS_MaskButton 控件
Figure 16
UButton 控件
图 17:UIButton 控件
Figure 17

在自定义控件下,是 UIButton 类的标准控件。

该按钮应设置为“默认”样式。 此类不利用父类的某些较新功能。 但是,您可以为每种模式(正常、突出显示或禁用)指定不同的文本,以及每种模式的图像。 当以适当的模式显示时,控件将使用这些值。

突出显示时,控件将始终调暗显示(通过降低不透明度)。 默认情况下,它不会对禁用状态执行任何操作(事实上,您可以将禁用的 RVS_MaskButton 实例用作事实上的“标签”)。

您可以在此处指定字体。 此字体将用于渲染。

UIView 控件

在检查器的底部,您将找到 UIView 基类的控件。

图 18:UIView 控件
Figure 18

您可以在此处设置 backgroundColortintColor 属性。 应该注意的是,该控件在运行时将这两个属性都设置为 .clear,但如果需要指定渐变中的颜色,则会记录它们。

以编程方式

您创建 RVS_MaskButton 实例的方式与创建 UButton 实例的方式完全相同

let maskButtonBald = RVS_MaskButton()
let maskButtonFramed = RVS_MaskButton(frame: maskFrame)

然后,您可以执行诸如设置自动布局和分配选择器操作之类的操作。

如果 layer.borderWidth 属性设置为非零(默认值为零),则将在控件周围绘制一个边框,其厚度由属性的值指定。

您可以通过可检查的 borderWidthInDisplayUnits 属性访问此属性。 设置此属性会更改边框的宽度。 将其设置为 0(默认值)表示没有边框。

强制重绘

无论控件是通过故事板还是以编程方式设置的,它都会缓存图像,并且有时可能需要刷新缓存并重绘。 这是通过 forceRedraw() 方法完成的。

建议您在视图控制器执行其 viewWillLayoutSubviews() 方法时调用此方法。

关于以编程方式设置字体的说明

Apple 限制对 UIButton 的 font 属性的访问(从 Attributes Inspector 设置的那个),所以我们声明 一个单独的访问器,称为 buttonFont: UIFont?。 使用它以编程方式设置字体。

测试工具应用程序

图 19:时钟标签 图 20:卡片标签
Figure 19 Figure 20

该项目的测试工具是一个功能强大且编写良好的应用程序,旨在提供 RVS_MaskButton 在实际应用中的示例。 它有两个标签:一个具有运行的数字时钟,展示了基于文本的控件,第二个标签具有“扑克牌浏览器”,允许您查看使用图像的按钮。

每个标签都有一组控件,允许您访问各种属性。

注意: 该应用程序在手机上的横向模式下效果不佳。 屏幕太窄了。

依赖项

按钮类本身没有依赖项,但测试工具依赖于 RVS_Generic_Swift_Toolbox 模块RVS_BasicGCDTimer 模块。 我们在测试工具应用程序中使用 Wolf Lambert (WLM Fonts) 的“Let's Go Digital”字体。 我们在测试工具应用程序中使用的扑克牌图像来自 Wikimedia Commons

许可证

© 版权所有 2022-2025,The Great Rift Valley Software Company

该代码是 MIT 许可证。 随意使用。 感谢归属。

一些视觉资源是 The Great Rift Valley Software Company 的版权/商标,不得重复使用。