JunoSlider 是一个 visionOS 的自定义滑块(可能也适用于 iOS!),用于模仿 Apple 在 AVPlayer
等视图中使用的可展开滑块的样式,特别是在无法使用 AVPlayer
的情况下。
它使用 SwiftUI 构建,并且可自定义,collapsed(折叠)和 expanded(展开)的高度都可以更改。
Apple 内置的 Slider
控件可能更适合许多情况,尤其是不需要展开效果的情况。内置的 Slider
*可以* 动画显示其 controlSize
属性,但在 visionOS 上动画效果有点奇怪。此外,即使使用 .mini
,高度也不是非常可定制,Slider
也不允许你像 Apple 的 AVPlayer
滑块那样窄。
非常感谢 Matthew Skiles 和 Ed Sanchez 帮助我实现控件上的内部和投影。还要感谢 Twitter 和 Mastodon 上的朋友们,他们帮助我 调试了这个控件的动画问题,这*似乎*是一个 SwiftUI 的 bug,并且裁剪掉动画跳跃的想法似乎是最好的折衷方案。
import JunoUI
struct ContentView: View {
@State var sliderValue: CGFloat = 0.5
@State var isSliderActive = false
var body: some View {
JunoSlider(sliderValue: $sliderValue, maxSliderValue: 1.0, baseHeight: 10.0, expandedHeight: 22.0, label: "Video volume") { editingChanged in
isSliderActive = editingChanged
}
}
}