我目前正在尝试将滑块转换为旋钮,但经历了一段艰难的时期。旋钮在设计中工作,但我正在努力在旋钮内设置正确的值,结果实时更改应用程序中的值。
我正在使用 AVAudio 设置一个引擎,供人们使用具有混响和延迟等效果的录音。
混响值在音频类中设置如下:
@Published var reverbValue: Float = 0.0
稍后在函数中引用以更改其值
func changeReverbValue() {
setReverb.wetDryMix = reverbValue
}
当我按如下方式使用常规滑块时,更改有效:
Slider(value: $recordingsettings.reverbValue,in: Float(0.0)...recordingsettings.reverbMaxValue,onEditingChanged: { _ in
self.recordingsettings.changeReverbValue()
}).accentColor(Color.white)
如前所述,旋钮在其设计中运行良好:
ZStack {
Knobs(color: .orange)
.rotationEffect(
.degrees(max(0,initialCircleState()))
)
.gesture(DragGesture(minimumDistance: 0)
.onEnded({ _ in
startDragValue = -1.0
})
.onChanged { dragValue in
let touchDifferential = touchDifference(dragValue)
setInitialDragVal()
let computedTouch = computeTouch(touchDifferential)
print(computedTouch)
baseValue = getBaseVal(computedTouch)
let normalizeVal = baseValue / touchAmt
value = Float(normalizeVal * rngOffset(range: bounds) + bounds.lowerBound)
print("vaule is: \(value)")
}
)
GrayCircle(bounds: bounds)
OrangeCircle(baseValue: $value,bounds: bounds)
}
.rotationEffect(bounds.lowerBound < 0 ? .degrees(90) : .degrees(107))
我已经成功地将旋钮连接到混响值,当旋钮移动时滑块也会移动,但是 changeReverbValue 功能不起作用。
成功来自如下设置旋钮视图中的值:
@Binding var value: AUValue
然后在与滑块相同的主视图结构上引用旋钮:
Knob(value: $recordingsettings.reverbValue,bounds: 0...CGFloat(recordingsettings.reverbMaxValue))
.onTapGesture {
self.recordingsettings.changeReverbValue()
}
点击手势是一种我认为在转动旋钮时它可能会调用更改混响值功能但无济于事的方式。
在旋钮中传递的绑定值还有其他挑战。出于某种原因,当我在没有耳机的情况下播放音频然后转动旋钮时,音频开始断断续续。耳机不会发生这种情况,我觉得这很奇怪。
有谁知道我如何在旋钮中引用混响值并同时调用 changeReverbValue 函数?
我只想用看起来更好的东西替换滑块。否则,我将不得不暂时搁置这一点,而是在整个应用程序中实现滑块。
如果我没有在旋钮视图中将旋钮的值设置为 @binding,则曲目在播放时不会断断续续,但我不知道是否可以在没有 @binding var 的情况下更改混响值.