티스토리 뷰

iOS

iOS ) Gesture Recognizer - Long Press

Zedd0202 2018. 1. 16. 19:58

안녕하세요 :) Zedd입니다.

드디어!!

이제 딱 2개 남았는데 그 중 하나를 오늘 하겠습니당.

바로 Long Press...이름만 들어도 뭔지 알겠네요 아이폰 쓰면 무조건 안다는 그 Gesture....

홈 스크린에서 앱 지우고 싶을 때, 손가락을 오래 꾸욱 누르고 있으면 앱이 막 막 부글부글..뭐라하지? 암튼 그러자나요

거기서 이  Long Press Gesture Recognizer가 사용된거겠죠?

암튼 사용해봅시당.



Gesture Recognizer  - Long Press




Long Press Gesture Recognizer에 대한 정의를 보면, 역시 이름에 걸맞게...길게 누르는 Gesture를 찾는 UIGestureRecognizer의 concrete subclass라고 합니다.


사용자가 View에서 하나 이상의 손가락을 누르고, 최소 시간동안 그 위에서 손가락을 올려놓아야 동작이 트리거 됩니다.

아래로 내려가는 동안, 사용자의 손가락은 지정한 거리 이상으로 움직일 수 없으며, 사용자가 지정한 거리를 벗어나면 Gesture가 실패합니다.

Long-press gestures는 연속적(continuous)입니다.  Gesture는 minimumPressDuration(지정 시간)동안 numberOfTouchesRequired(허용 손가락수)가 눌려지고, allowableMovement(터치가 허용되는 이동 범위)이상으로 이동하지 않으면 began상태가 됩니다. ( Long Press Gesture라고 인식이 될 때!! 그때 began상태인거임 )

Gesture Recognizer는 손가락이 움직일때마다 changed상태가 되고, 손가락이 들릴때 ended상태로, 끝나게 됩니다.


Long Press는 정말 별게 없습니다.

다른 Gesture와 똑같아요.

View에 Long Press Gesture Recognizer만 추가해줘도 Long Press가 인식이 된답니다.



그냥  Long Press Gesture Recognizer추가해주고, Action에 Alert띄우는 코드 넣은거!

minimumPressDuration이런거 안정해줘도 되냐?

네! 안정해줘도 됩니다. 왜냐하면 minimumPressDuration의 default값이 0.5초이기 때문이죠.

내가 2초동안 길게 누르는걸 Long Press Gesture로 인식하고 싶다!!! 

그럼 minimumPressDuration을 2로 주면 된답니다.



Long Press Gesture Recognizer에는 이러한 프로퍼티들이 있는데, 맨 위의 Min Duration은 방금 말한 minimumPressDuration입니다.


Recognize에는 Taps와 Touches가 있죠? 

Taps의 프로퍼티 이름은 numberOfTapsRequired에요. 

이름에서 볼 수 있듯이 "필요한 수의 탭"인데,

정말 말그대로 이 Long Press Gesture를 하기 위해 필요한 탭의 수에요. 

numberOfTapsRequired의 가장 중요한 특징은 기본값이 0이라는 겁니다.

(왜 1이 아닌거지?...)

그래서 


  1. longPressGestureRecognizer.numberOfTapsRequired = 1


이렇게 해놓으면 총 두번을 탭해야 합니다. 

Taps옆에있는 Touches는 Taps와 뭔차이야;;할 수 있는데 


필요한 손가락의 개수!!라고 생각하시면 됩니다. 물론 기본값은 1이겠죠? 

이 Touches에 해당하는 프로퍼티이름은 numberOfTouchesRequired. 


만약 


  1. longPressGestureRecognizer.numberOfTouchesRequired = 2


이렇게 되어있다면 반드시 손가락 2개를 반드시 사용하여 minimumPressDuration만큼 누르고 있어야 한다는 것이죠.


그리고 밑에있는 Tolerance. 이미지에는 3000;;이라고 되어있는데 제가 테스트하느라 준 값이구요.

기본값은 10입니다.

Tolerance가 머여;;



위에서 언급했죠?

"사용자의 손가락은 지정한 거리 이상으로 움직일 수 없으며, 사용자가 지정한 거리를 벗어나면 Gesture가 실패합니다."라구요.

여기서 지정한 거리가 위의 Tolerance로, 10인것이죠. 이 Tolerance에 해당하는 프로퍼티 이름은 allowableMovement로,

Gesture가 실패하기 전에 허용되는 최대 이동거리입니다. 그리고 꼭 알아놓으셔야 할게, 여기서 거리는 픽셀단위를 의미합니다. 


지금은 10이라서, 조금만 크게 이동하면 Gesture인식이 실패하게 되는데요, 저렇게 3000..;;극단적인 값을 주게 되면, 허용범위가 엄청 늘어나는 거겠죠?



(minimumPressDuration을 2초로 줬습니다.)

Long-press gestures는 연속적(continuous)입니다. 라는 말이 무슨말인지 조금 이해가 가시죠!?!? allowableMovement때문에 이런말을 한게 아닌가 싶네요 XD

Long Press Gesture Recognizer는 다른 Gesture Recognizer에 비해 막 많은 메소드와 프로퍼티를 가지고 있는게 아니라서...간단하네요.

이렇게 간단해도 응용은 정말 다양하게 될 수 있으니!! 

특히 allowableMovement가 아주 강력한 것 같네요 :) 

오늘도 도움이 되었으면 좋겠습니당~.~ 




댓글
댓글쓰기 폼
Total
3,401,741
Today
207
Yesterday
3,443