1

我有一个我无法弄清楚的问题。我似乎无法弄清楚如何开始我最后一个手势位置结束的手势。

import SwiftUI

struct TestView: View {
    @State var xPosition: CGFloat = 50
    @State var yPosition: CGFloat = 50
    var body: some View {
        VStack{
            Circle()
                .frame(width: 100, height: 100)
                .position(x: xPosition, y: yPosition)
                .gesture(DragGesture()
                    .onChanged{gesture in
                        xPosition = gesture.translation.width
                        yPosition = gesture.translation.height
                    }
                    .onEnded{gesture in
                        xPosition = gesture.translation.width
                        yPosition = gesture.translation.height
                                
                    }
                )
        }
    }
}

struct TestView_Previews: PreviewProvider {
    static var previews: some View {
        TestView()
    }
}

这是代码,假设我做了一个手势并将我的圆圈移动到任何给定位置(效果很好)但是当我再次尝试拖动它时,手势再次从第一个位置(50,50)开始。GestureState有没有办法用或更新或其他任何方法来修复它?

感谢您花时间帮助我解决这个问题。

4

1 回答 1

1

translation一个相对位置(相当于location.{x,y} - startLocation.{x,y})。

你应该存储position而不是,即

struct TestView: View {
    @State var position: CGPoint = CGPoint(x: 50, y: 50)

    var body: some View {
        VStack{
            Circle()
                .frame(width: 100, height: 100)
                .position(position)
                .gesture(
                    DragGesture()
                        .onChanged { gesture in
                            position = gesture.location
                        }
                        .onEnded { gesture in
                            position = gesture.location
                        }
                )
        }
    }
}
于 2021-04-19T16:32:06.807 回答