iOS

iOS ) ScrollView에서 PanGestureRecognizer 사용하여 스크롤의 방향 (상하좌우) 인식하기 - with Storyboard

유사앱등이 2022. 6. 6. 04:19

 

스크롤뷰에서 사용이 안되서 피땀눈물 다흘리고 찾아낸 방법..

 

우선 스토리보드에서 pangesture 사용하는 방법은 

https://myios.tistory.com/109

여기에서 간단하게 확인 가능..

 

이제 이걸 스크롤뷰에서 사용해서, 스크롤할 때 버튼 색상이 변경되도록 하려고 함...

 

스크롤뷰 자체에서 제스처를 사용하기 때문에,

pan gesture recognizer와 함께 사용하면 충돌이 일어납니다

이걸 막기 위해.. 메서드 하나를 추가할건데

대충.. gesture recognizer를 동시에 인식할 수 있게 할 것이냐? 라는 그런 메서드임

얘를 사용해서 스크롤뷰의 제스처(스크롤링)와 pan gesture를 동시에 사용할 수 있게 됨

 

바로 이것........

꼭........

길더라도 전부 입력할 것...

멋대로 should~~~~ 빼고 넣었다가 안되서 몇시간 박았습니다..

extension SecondViewController: UIGestureRecognizerDelegate {
	
	func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
		return true
	}
	
}

 

위와 같이 extension을 사용해서 따로 메서드 추가해줘도 되고

그냥 viewcontroller 클래스에 UIGestureRecognizerDelegate 하나 더 가져와주고 안에 적어두 됨..

중요한 건 저 메서드를 넣느냐니까요..

 

 

이제 스크롤의 방향(상하좌우)을 인식해서 버튼 색을 바꿔보겠음

 

	@IBAction func panAction(_ sender: UIPanGestureRecognizer) {
		let velocity = sender.velocity(in: scrollView2)

		if velocity.y > 0 {
			button1.backgroundColor = .red
		} else {
			button1.backgroundColor = .blue
		}
	}

 

위로 스크롤할 때 빨강색, 그 외엔 파란색이 되도록 바꾼 코드인데

여기서 이제 좌우를 인식하고 싶다면 velocity.x 를 사용해서 코드를 만들어주면 됩니다

 

 

 

 

참고:

https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/coordinating_multiple_gesture_recognizers/allowing_the_simultaneous_recognition_of_multiple_gestures

 

Apple Developer Documentation

 

developer.apple.com