iOS 개발일지
UIView 객체를 드래그를 통해 이동시키자! (feat. UIPanGestureRecognizer) 본문
iOS - 코드블럭 아카이브
UIView 객체를 드래그를 통해 이동시키자! (feat. UIPanGestureRecognizer)
Lia's iOS 2023. 5. 18. 08:51
// 주의! 제스쳐를 추가할 버튼마다 제스쳐를 생성해주어야 한다.
// 같은 타겟과 액션을 가진 제스쳐라도 하나씩 등록하지 않으면 제대로 동작하지 않는다.
let panGestureStateButton = UIPanGestureRecognizer(target: self, action: #selector(dragButton))
stateButton.addGestureRecognizer(panGestureStateButton)
let panGestureCountButton = UIPanGestureRecognizer(target: self, action: #selector(dragButton))
countButton.addGestureRecognizer(panGestureCountButton)
@objc func dragButton(sender: UIPanGestureRecognizer) {
let translation = sender.translation(in: self)
guard let button = sender.view else { return }
// 슈퍼뷰 경계 내에서만 움직이도록 제한
let superViewBounds = self.bounds
let buttonSize = button.bounds.size
let newY = button.center.y + translation.y
let minY = buttonSize.height / 2
let maxY = superViewBounds.height - buttonSize.height / 2
// 수평 이동 금지하여 위아래로만 움직이도록 제한 (X 좌표는 현재 위치를 유지)
// 수평 이동을 허용하고 싶다면 clampedX도 동적인 값으로 변경
let clampedX = button.center.x
let clampedY = min(max(newY, minY), maxY)
button.center = CGPoint(x: clampedX, y: clampedY)
sender.setTranslation(.zero, in: self)
}
'iOS - 코드블럭 아카이브' 카테고리의 다른 글
UICollactionView/UITableView를 담은 UIScrollView의 크기를 동적으로 조정해 스크롤하자! (0) | 2023.05.30 |
---|---|
Modal 형태의 뷰를 스와이프를 통해 크기 조절해보자! (feat. UISwipeGestureRecognizer) (0) | 2023.05.18 |
UITextView의 글자수와 줄바꿈을 제한하자! (feat. UITextViewDelegate) (0) | 2023.05.18 |