ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] Label, Button 드래그로 위치 이동시키기
    Swift 2021. 1. 19. 11:01

    개요

    Label이나 Button 등을 드래그로 위치를 이동시키는 방법에 대해 글을 써보려고 합니다.

    Label 생성하기

    먼저 Label을 View에 추가해줍니다.

    let draggableLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
        draggableLabel.center = view.center
        draggableLabel.textAlignment = .center
        draggableLabel.text = "드래그로 이동하기"
        draggableLabel.isUserInteractionEnabled = true
        
    self.view.addSubview(dragableLabel)

     

    GestureRecognizer 생성하기

    생성된 Label 이 터치와 드래그를 인식할 수 있게 GestureRecognizer를 생성합니다.

    let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePan))

    GestureRecognize 에는 Tap, LongPress, Pan, Hover, Swipe 등 여러 제스처에 대해 만들어 줄 수 있어, 


    이에 맞추어 원하는 제스처를 이용해 만들 수 있습니다.

     

    지금은 드래그를 했을 때 이벤트를 발생시킬 것 이므로 UIPanGestureRecognizer로 생성해줍니다.

     

    드래그 이벤트 함수 생성

    @objc func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
    		// 드래그의 시작 확인
            if gestureRecognizer.state == .began || gestureRecognizer.state == .changed {
    			
                // 변환되는 좌표값을 얻어오기
                let translation = gestureRecognizer.translation(in: self.view)
                gestureRecognizer.view!.center = CGPoint(x: gestureRecognizer.view!.center.x + translation.x, y: gestureRecognizer.view!.center.y + translation.y)
                // Label에 해당되는 좌표를 적용시키기
                gestureRecognizer.setTranslation(CGPoint.zero, in: self.view)
            }
        }

    GestureRecognizer 추가

    생성했던 Label 에 GestureRecognizer를 추가합니다.

    dragableLabel.addGestureRecognizer(gestureRecognizer)

     


    실행결과

     

    github

    댓글

Designed by Tistory.