Ios SwiftUI-拖放圆
我试图创建可以拖放的圆圈 我能够让它只在第一个圆上工作,但是,第一个圆之后的任何东西都不起作用 预期行为:拖动时圆圈跟随我的光标,拖动结束时降落在最终位置 实际行为:圆圈跟随光标的水平位置,但不是垂直位置(垂直位置始终明显低于光标)Ios SwiftUI-拖放圆,ios,swift,user-interface,swiftui,drag-and-drop,Ios,Swift,User Interface,Swiftui,Drag And Drop,我试图创建可以拖放的圆圈 我能够让它只在第一个圆上工作,但是,第一个圆之后的任何东西都不起作用 预期行为:拖动时圆圈跟随我的光标,拖动结束时降落在最终位置 实际行为:圆圈跟随光标的水平位置,但不是垂直位置(垂直位置始终明显低于光标) ContentView.swift import SwiftUI struct ContentView: View { var body: some View { VStack(alignment: .center) {
ContentView.swift
import SwiftUI
struct ContentView: View {
var body: some View {
VStack(alignment: .center) {
ForEach(0..<5) { _ in
DraggableCircles()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct DraggableCircles: View {
@State var dragAmount: CGPoint = CGPoint.zero
var body: some View {
Circle().fill(Color.red)
.frame(width: 50, height: 50)
.gesture(
DragGesture(coordinateSpace: .global).onChanged {action in
let location = action.location
let newWidth = location.x
let newHeight = location.y
let size = CGPoint(x: newWidth, y: newHeight)
self.dragAmount = size
}.onEnded{action in
let location = action.location
let newWidth = location.x
let newHeight = location.y
let size = CGPoint(x: newWidth, y: newHeight)
self.dragAmount = size
}
)
.position(x: dragAmount.x, y: dragAmount.y)
}
}
导入快捷界面
结构ContentView:View{
var body:一些观点{
VStack(对齐:。中心){
ForEach(0..必须将阻力值添加到最后一个位置。正确的计算方法在这里
struct DraggableCircles: View {
@State private var location: CGPoint = CGPoint(x: 50, y: 50)
@GestureState private var startLocation: CGPoint? = nil
var body: some View {
// Here is create DragGesture and handel jump when you again start the dragging/
let dragGesture = DragGesture()
.onChanged { value in
var newLocation = startLocation ?? location
newLocation.x += value.translation.width
newLocation.y += value.translation.height
self.location = newLocation
}.updating($startLocation) { (value, startLocation, transaction) in
startLocation = startLocation ?? location
}
return Circle().fill(Color.red)
.frame(width: 50, height: 50)
.position(location)
.gesture(dragGesture)
}
}