一个 Swift 包,包含一个 SwiftUI 控件,它模仿了 SwiftUI 的分段样式 Picker。
复制了原生控件的行为
在视觉上,复制并不完全精确,但在我看来很接近。特别是:
附加功能
accentColor
颜色(与原生控件不同).init(selectedIndex: $selected, count: 4)
.init(selectedIndex: $selected, ["One", "Two", "Buckle", "Shoe"])
@ViewBuilder
方法,分段可以拥有自己的自定义视图ShapeStyle
方法自定义分段视图的前景色样式disableAnimations
禁用动画只需将 brh-segment-control
包添加到您的 Package.swift
文件或通过 Xcode 添加。
dependencies: [
.package(url: "https://github.com/bradhowes/brh-segmented-control", from: "1.0.0"),
],
...
.target(
name: "MyView",
dependencies: [
.product(name: "BRHSegmentedControl", package: "brh-segmented-control")
]
),
有关如何使用的示例,请参阅 BRHSegmentedControl.swift 中的 PreviewContent
结构。 还有单元测试,它们练习 API 并显示其他示例。
默认的视图构建器方法位于 BRHSegmentedControlSupport.swift 中。 创建自定义的很容易,并且可以更好地控制分段内容。 有两个版本,一个采用一个 Int
参数,另一个采用一个 Int
和一个 String
。 当您在 init
方法中提供字符串集合时,需要第二个版本。 第一个参数是要生成的分段的索引,第二个参数是 init
中给定的集合中的值。
我编写了此存储库中的所有代码,除了允许在代码中选择浅色/深色的 Color
扩展。 这来自 Jesse Squires 的 博客文章。 在我自己的 AUv3 项目中,我首先开始使用 CustomizableSegmentedControl,作者是 Tyoma Zagoskin,但我后来决定尝试复制 Apple 的实现,所以就有了这个。 最后,这篇帖子 在 StackOverflow 上,作者是 Benzy Neez,帮助我正确地连接了 DragGesture
,以处理与分段的拖动交互。 这确实是缺失的一环,它神奇地将所有东西结合在一起,让我至少可以模仿(如果不能完全复制)Apple 实现中的小细节。