- This topic has 2개 답변, 2명 참여, and was last updated 4 years, 8 months 전에 by 뚭니.
1 답변 글타래를 보이고 있습니다
-
글쓴이글
-
-
뚭니참가자
- 글작성 : 9
- 답글작성 : 17
ISSUE
- scrollView 에서 스크롤이 발생했을 때 위쪽으로 pan 했는지, 아래쪽으로 pan 했는 지에 따라서 인터랙션 효과를 주고 싶었다.
기본 코드
- velocity 는 속력이 아니라 속도이기 때문에, 방향 값을 가지고 있다는 판단으로 velocity 의 y 값만 추출하면 pan 의 방향을 알 수 있을 것이라 생각하고 다음과 같이 사용하였었다.
extension ViewController : UIScrollViewDelegate { func scrollViewDidScroll(_ scrollView: UIScrollView) { let yVelocity = scrollView.panGestureRecognizer .velocity(in: scrollView).y if yVelocity > 0 { actionWhenDown() } else if yVelocity < 0 { actionWhenUp() } print(scrollView.contentOffset) } }
문제 인식
- 그러나 곧 이상한 부분이 보였다. 화면에 손이 닿은채로 (pan 한 상태로) tableview를 이동했을 때는 contentOffset 이 알맞게 출력되고 actionWhenUp() 메소드도 잘 작동하는 듯 보였다.
- 하지만 짧게 pan 한 상태로 튕기듯이 드래그를 하면 contentOffset.y 값은 쭉쭉 올라가는데도 불구하고 위로 올렸을 때 actionWhenUp() 가 적절히 동작하지 않았다.
문제 원인
- yVelocity 값을 출력해보니 스크린에 손이 닿은 상태로 panning 하였을 때는 yVelocity 값이 잘 출력되었으나, 손을 떼는 순간 0.0 값이 찍히는 것을 확인할 수 있었다.
- 따라서 짧게 panning 하면 (튕기듯이) tableView 가 위로 이동하여 contentOffset.y 값은 올라가는데도 불구하고 yVelocity 값은 계속 0 이었다.
extension ViewController : UIScrollViewDelegate { func scrollViewDidScroll(_ scrollView: UIScrollView) { let yVelocity = scrollView.panGestureRecognizer .velocity(in: scrollView).y print(yVelocity) } }
- 공식 문서를 다시 읽어보니 panGesture 는 화면에서 하나 이상의 ‘손가락의 움직임을 추적’ 하는 것이라는 점을 확인했다.
- 화면에서 손을 떼는 순간 추적할 방법이 없어지는 것이다.
~~오늘의 배운 점: 역시 공식 문서를 잘 읽어야한다…~~
해결 방안
- 아직 해결하진 못했지만 방법을 생각 중에 있는데 고려하고 있는 대안은 다음과 같다.
- contentOffset 의 y 값을 추적하여 현재 값보다 증가하면 actionWhenUp() 메소드를, 현재 값보다 감소하면 actionWhenDown() 메소드를 실행한다.
- 위 방법으로 시도를 해보고, 또 다른 이슈가 있다면 정리하여 해결하고자 한다.
2020-03-20 오후 9:14 #3163 -
-
-
글쓴이글
1 답변 글타래를 보이고 있습니다
- 답변은 로그인 후 가능합니다.