JunoSlider

Two JunoSliders vertically stacked, the first narrower than the second, being slid and updating corresponding Text views

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
        }
    }
}