【发布时间】:2019-08-24 01:28:46
【问题描述】:
我想拖动一个滑块,当然也让它滑动。 我可以做一个或另一个,但我不能两者都做。 如何拖动并拥有一个工作滑块?
我也试图找到一种方法来移除手势,但我找不到这样做的方法。 还尝试了 Apple“撰写 SwiftUI Gestures”文档中的“Sequenced Gesture States”代码, 并引入一个标志来打开/关闭拖动,结果相同,拖动或滑动不两者兼而有之。
我还尝试将滑块放在容器(VStack)中并将拖动手势附加到该容器中, 但这也不起作用。
import SwiftUI
struct ContentView: View {
@State var pos = CGSize.zero
@State var acc = CGSize.zero
@State var value = 0.0
var body: some View {
let drag = DragGesture()
.onChanged { value in
self.pos = CGSize(width: value.translation.width + self.acc.width, height: value.translation.height + self.acc.height)
}
.onEnded { value in
self.pos = CGSize(width: value.translation.width + self.acc.width, height: value.translation.height + self.acc.height)
self.acc = self.pos
}
return Slider(value: $value, in: 0...100, step: 1)
.frame(width: 250, height: 40, alignment: .center)
.overlay(RoundedRectangle(cornerRadius: 25).stroke(lineWidth: 2).foregroundColor(Color.black))
.offset(x: self.pos.width, y: self.pos.height)
.simultaneousGesture(drag, including: .all) // tried .none .gesture, .subviews
// also tried .gesture(flag ? nil : drag)
}
}
使用“simultaneousGesture”,我希望两个手势同时操作。
【问题讨论】:
-
很抱歉,我无法理解“拖动滑块”的工作原理。滑块的概念 - 无论是哪种语言 - 都意味着拖动正在工作滑块。你能举个例子吗?最好使用
UIKit?自从您标记了这个 SwiftUI,我发现很多次要求使用 `UIKit1 的示例让我更清楚。 -
这里的想法是能够改变屏幕上的滑块位置(拖动它),就像你要在屏幕上拖动一个对象一样。这就是上面的代码所做的。但是,当屏幕上的这种拖动停止时,我希望能够使用滑块旋钮来更改滑块值,这就是我在问题中所说的幻灯片。