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)
}