관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 드래그하여 view움직이기 (draggable view) UIPanGestureRecognizer 본문

iOS 응용 (swift)

[iOS - swift] 드래그하여 view움직이기 (draggable view) UIPanGestureRecognizer

jake-kim 2021. 1. 17. 13:40

의존성

  • RxSwift, RxCocoa를 사용하여 편리하게 binding 
  pod 'RxSwift'
  pod 'RxCocoa'

UIPanGestureRecognizer() 등록

  • 초기 코드
import UIKit
import RxSwift
import RxCocoa

class ViewController: UIViewController {

    let bag = DisposeBag()

    @IBOutlet weak var myView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        setupInputBinding()
    }

    private func setupInputBinding() {
    }
    
}
  • binding 구현
    - sender.trnslation(in:superView): sender를 통해 superView에서 움직인 정보 획득
    - 위 정보를 바탕으로 center값 수정
    - sender의 움직인 값을 0으로 다시 초기화
    private func setupInputBinding() {
        let panGesture = UIPanGestureRecognizer()
        myView.addGestureRecognizer(panGesture)
        panGesture.rx.event.asDriver { _ in .never() }
            .drive(onNext: { [weak self] sender in
                guard let view = self?.view,
                      let senderView = sender.view else {
                    return
                }

                // view에서 움직인 정보
                let transition = sender.translation(in: view)
                senderView.center = CGPoint(x: senderView.center.x + transition.x, y: senderView.center.y + transition.y)

                sender.setTranslation(.zero, in: view) // 움직인 값을 0으로 초기화
            }).disposed(by: bag)
    }
Comments