(이미지,아이콘) 드래그 앤 드롭

이창형·2022년 5월 5일
0

iOS 박살내기

목록 보기
1/10
post-thumbnail

전체 코드

// 아이콘의 변경 좌표를 저장할 변수
@State private var dragOffset = CGSize.zero
// 아이콘의 현재 위치를 저장할 변수
@State private var dragOffset2 = CGSize.zero

var body: some View {
        Image(systemName: "person.fill")
            .font(.largeTitle)
        // 아이콘에 offset(기준이 되는 주소에 더해지는 값) 설정
            .offset(x: dragOffset.width , y:dragOffset.height )
            // 드래그를 사용할 것이기 때문에 DragGesture() 사용
            .gesture(DragGesture()
            // 아이콘을 드래그하기 시작했을 때 실행
                .onChanged { gesture in
                    dragOffset = CGSize(width: gesture.translation.width + dragOffset2.width, height: gesture .translation.height + dragOffset2.height)
                }    
                // 아이콘 드래그를 마쳤을 때 실행
                .onEnded { gesture in
                    dragOffset = CGSize(width: gesture.translation.width + dragOffset2.width, height: gesture .translation.height + dragOffset2.height)
                    dragOffset2 = dragOffset
                })
    }

onChanged

  • onChanged에서 사용할 변수 gesture 선언
onChanged { gesture in }

  • translation은 아이콘이 현 위치에서 얼마나 움직인 지를 알려준다
    그러므로 dragOffset의 width와 height는 아이콘의 좌표(dragOffset2)와 드래그를 실행하면서 움직이는 좌표를 더하여 움직이는 만큼 아이콘을 움직이게 보여준다.
dragOffset = CGSize(width: gesture.translation.width + dragOffset2.width, height: gesture .translation.height + dragOffset2.height)

onEnded

  • onChanged에서 현재 위치를 dragOffset에 지정을 해주었는데 dragOffset은 결국 다시 움직일 때 현 위치에서 변경된 값을 저장하기 위해 사용해야 하므로 dragOffset2에 현 위치를 저장시킨다.
dragOffset2 = dragOffset
profile
iOS Developer

0개의 댓글