Need a little help with my code

Hello everyone, Can someone tell me how to move the circle in the same position of the arrow (like to go up if I press up, down if I press down... and so right if I press right) but it doesn't go right, I can't know why. Please can someone help me to figure out this? Here's the code:

import SwiftUI
import PlaygroundSupport

struct ContentView: View {

    @State var offset: CGFloat = 0

    var body: some View {

        Circle()
            .frame(width: 80, height: 80)
            .position(x: 140, y: 140 + offset)

        Spacer(minLength: 20)

        Button(
            action: {
                offset += 20             
            }, label: {
                Image(systemName: "arrowtriangle.down.circle.fill")
                    .resizable()
                    .foregroundColor(.blue)
                    .frame(width: 70, height: 70)
                    .padding()
            }
        )

        Button(
            action: {
                offset += 20 
        

            }, label: {

                Image(systemName: "arrowtriangle.right.circle.fill")
                    .resizable()
                    .foregroundColor(.blue)
                    .frame(width: 70, height: 70)
                    .padding()
            }
        )
    }
}


PlaygroundPage.current.setLiveView(ContentView())

Thanks in advance.

Answered by Claude31 in 705099022

Just create 2 offsets, for vertical and horizontal.

struct ContentView: View {

    @State var vOffset: CGFloat = 0
    @State var hOffset: CGFloat = 0

    var body: some View {

        Circle()
            .frame(width: 80, height: 80)
            .position(x: 140 + hOffset, y: 140 + vOffset)

        Spacer(minLength: 20)

        Button(
            action: {
                vOffset += 20
            }, label: {
                Image(systemName: "arrowtriangle.down.circle.fill")
                    .resizable()
                    .foregroundColor(.blue)
                    .frame(width: 70, height: 70)
                    .padding()
            }
        )

        Button(
            action: {
                hOffset += 20
            }, label: {

                Image(systemName: "arrowtriangle.right.circle.fill")
                    .resizable()
                    .foregroundColor(.blue)
                    .frame(width: 70, height: 70)
                    .padding()
            }
        )
    }
}
Accepted Answer

Just create 2 offsets, for vertical and horizontal.

struct ContentView: View {

    @State var vOffset: CGFloat = 0
    @State var hOffset: CGFloat = 0

    var body: some View {

        Circle()
            .frame(width: 80, height: 80)
            .position(x: 140 + hOffset, y: 140 + vOffset)

        Spacer(minLength: 20)

        Button(
            action: {
                vOffset += 20
            }, label: {
                Image(systemName: "arrowtriangle.down.circle.fill")
                    .resizable()
                    .foregroundColor(.blue)
                    .frame(width: 70, height: 70)
                    .padding()
            }
        )

        Button(
            action: {
                hOffset += 20
            }, label: {

                Image(systemName: "arrowtriangle.right.circle.fill")
                    .resizable()
                    .foregroundColor(.blue)
                    .frame(width: 70, height: 70)
                    .padding()
            }
        )
    }
}

And if I want to change the image from the current circle to a rectangle when I click the Right button. How can I do it if it's possible?

Need a little help with my code
 
 
Q