一种允许“透视”遮罩的特殊 UIButton 变体。
这个类实现了一个非常基础的 UIButton
子类按钮(因此它可以用来代替 UIButton),它提供了一个渐变背景,并且能够将其遮罩在文本内部(您可以使用任何您想要的字体),或者在模板图像内部,或者,也可以用渐变填充按钮,并“冲压”出文本和/或图像。渐变是两种颜色之间的基本线性渐变,并且可以更改渐变的角度。如果只定义了一种颜色,则填充是纯色。
此类是为特定用例而设计的,在一个更大的应用程序中。我们想要一个大的、横幅样式的按钮,使用特定的字体,并填充渐变。
按钮中的文本会发生变化,以反映应用程序的状态,所以图像是不可能的。 这使得拥有基于渐变的文本或模板图像显示,并具有透明背景变得极其简单。
这是该类可以做的事情的一个小例子(来自 测试工具应用程序)
图 1:基本文本按钮 | 图 2:反转 |
---|---|
![]() |
![]() |
图 3:无边框 | 图 4:旋转渐变(反转) |
---|---|
![]() |
![]() |
图 5:旋转渐变(正常) | 图 6:不同的字体 |
---|---|
![]() |
![]() |
图 7:纯色(蓝色) | 图 8:纯色(黄色) |
---|---|
![]() |
![]() |
图 9:纯色,反转,边框,图像 | 图 10:纯色,正常,图像 |
---|---|
![]() |
![]() |
图 11:渐变,反转,边框,图像 | 图 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
引用即可。
注意: 这是该项目的技术文档。此外,该模块旨在提供出色的 DocC 支持,并将在您的 Apple 文档窗口中显示。
此外,这里的所有示例都来自 测试工具项目,这是一个很好的示例代码来源。
首先,从对象调色板中拖动一个 Button
对象到您的故事板中,并根据需要进行连接。
图 13:将 UIButton 实例拖到您的视图控制器中 | 图 14:设置类名 |
---|---|
![]() |
![]() |
安装完成后,选择新对象,并在 Identity Inspector 中将其类设置为 RVS_MaskButton
。您可能还需要将模块指定为 RVS_MaskButton
。
现在,切换到 Attributes Inspector
图 15:控件属性 |
---|
![]() |
我们将在下面检查每个突出显示的部分。
顶部部分具有 RVS_MaskButton
类独有的控件
图 16:RVS_MaskButton 控件 |
---|
![]() |
渐变开始颜色
这是用作渐变的“顶部”或开始的颜色。 如果保留为默认值,它将使用 backgroundColor
(首选)、tintColor
、父视图的 tintColor
属性,以及任何名为 "AccentColor" 的颜色(选择颜色的标准资源)。 如果这些都不可用,控件将无法呈现。
渐变结束颜色
这是用作渐变的“底部”或结束的颜色。 如果保留为默认值,将使用 gradientStartColor
(纯色)。
渐变角度(度)
这是绘制渐变的角度。 它可以是 -180...180。 0(默认值)表示 gradientStartColor
在顶部,gradientEndColor
在底部。 负值是逆时针方向,正值是顺时针方向。
反转
这表示应该呈现控件,以便从背景中“冲压”出前景(文本或图像),背景将填充渐变。 如果它为 false(默认值),那么只有文本/图像将填充渐变。
边框宽度(显示单位)
这允许您指定边框宽度(默认值为 0,或无边框)。
图 17:UIButton 控件 |
---|
![]() |
在自定义控件下,是 UIButton
类的标准控件。
该按钮应设置为“默认”样式。 此类不利用父类的某些较新功能。 但是,您可以为每种模式(正常、突出显示或禁用)指定不同的文本,以及每种模式的图像。 当以适当的模式显示时,控件将使用这些值。
突出显示时,控件将始终调暗显示(通过降低不透明度)。 默认情况下,它不会对禁用状态执行任何操作(事实上,您可以将禁用的 RVS_MaskButton
实例用作事实上的“标签”)。
您可以在此处指定字体。 此字体将用于渲染。
在检查器的底部,您将找到 UIView
基类的控件。
图 18:UIView 控件 |
---|
![]() |
您可以在此处设置 backgroundColor
和 tintColor
属性。 应该注意的是,该控件在运行时将这两个属性都设置为 .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:卡片标签 |
---|---|
![]() |
![]() |
该项目的测试工具是一个功能强大且编写良好的应用程序,旨在提供 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 的版权/商标,不得重复使用。