我正在尝试将 watchOS 应用程序的视图转换为 Swift UI。我想将 watchKit 中的音量控制移植到带有自定义控件的 SwiftUI。在下图中,您可以看到视图的当前状态。
音量控制会根据当前状态更改铃声的进度,volume并且volume在我转动数码表冠时也会更改。如果没有 SwiftUI,就可以在旋转表冠时调用一个函数。这已经改变了,系统只允许我绑定一个变量。
我想知道的是绑定一个变量并在该变量的每次更改时调用一个函数。因为正常的 Digital Crown 行为不能满足我的需求。
一件事有效,但远非完美是:
.digitalCrownRotation($crownAccumulator, from: -100.0, through: 100.0, by: 1, sensitivity: .low, isContinuous: true, isHapticFeedbackEnabled: true)
.onReceive(Just(self.crownAccumulator), perform: self.crownChanged(crownAccumulator:))
Run Code Online (Sandbox Code Playgroud)
OnReceive 将在每次旋转表冠时调用,但也会在视图的每一次其他更新时调用。
所以我想要的是这样的管道:
皇冠旋转?crownAccumulator变化 ?名为 async 的函数?功能更新volume
过去我会使用 didSet 来完成此操作,但这不再可用
这里是它的代码:
@ObservedObject var group: Group
@State var animateSongTitle: Bool = false
@State var songTitle: String = "Very long song title that should be scrolled"
@State var artist: String = "Artist name"
@State …Run Code Online (Sandbox Code Playgroud) 有没有办法创建CurrentValueSubject只读的?
所以你可以sink公开它,value公开阅读,但只能send在内部/私下对其进行评估。想在库模块中使用它。