Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SwiftUI-拖放圆_Ios_Swift_User Interface_Swiftui_Drag And Drop - Fatal编程技术网

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