2009-09-08 2 views
2

사용자가 화면을 터치하지만 움직이지 않는 경우를 알고 싶습니다. 의사 방식으로 사용하는 것은 간단합니다. 나는 touchesBegan과 touchesEnded를 사용하여 얼마나 많이 터치했는지 알고 있습니다.하지만 문제는 touchesMoved 만 이벤트를 보냅니다. 이 (가)이 아닌 경우 이벤트가 전송되지 않습니다. 이것은 멋진 슬라이딩 스크롤을 사용하고 있습니다 - 스크롤링을 풀어 낼 수 있으며 놓은 후에도 스크롤을 계속할 수 있지만 손가락이 아래쪽이지만 움직이지 않으면 즉시 멈 춥니 다. 나는 touchesMoved에 fingerDown boolean을 설정하고, 동기화되지 않았기 때문에 내 루프 (스크롤 및 슬라이딩이 발생하는 곳)에 false를 설정할 수 없습니다.iPhone 사용자가 화면을 터치하지만 움직이지 않는 경우 어떻게 알 수 있습니까?

기본적으로 나는 touchesNotMoved 이벤트를 시뮬레이트하고 싶다. 움직일 때마다 특정 bool이 true이고, 움직이지 않을 때는 false이다.

또한 왜 내가 애플의 스크롤을 사용하지 않고 있는지 묻지 말아라 -이 질문과 아무런 관련이없는 좋은 이유가있다. :-)

답변

1

이것은 터치가 활성화되지 않은 경우에 대한 답변이 아니지만, 은 내가 원하는대로 합리적인 해결책을 제공합니다. 다른 사람이 애플의 스크롤 뷰 (픽셀 완벽한 스크롤 플러스 좋은 별거 및 슬라이드)을 시뮬레이션하려고하는 경우

그래서, 당신은 다음을 원할 것입니다 : 접촉의 수

정수 유지 트랙.
터치 이벤트와 다른 루프 또는 타이머.
스크롤 "감쇠"양을 저장하는 벡터 (또는 두 개의 부동 소수점).
0.95와 같은 일정한 부동 소수점 감쇠 값.

다음과 같이 할 수 있습니다.
- touchesBegan에서 touchCount를 [touches count]만큼 증가시킵니다.
- touchesEnded에서 [touch to count]만큼 touchCount를 감소시킵니다.
- touchesMoved에서 currentTouchPos - previousTouchPos를 나타내는 벡터를 만듭니다.
- 해당 벡터로보기를 스크롤하십시오.
- scrollDecay 벡터를 해당 벡터와 동일하게 설정하십시오.
- 메인 타이머 또는 루프에서 으로보기를 스크롤하십시오 (
). 터치 카운트 < = 0뿐입니다. 또한 decay 값으로 scrolLDecay 벡터를 곱하십시오. 매우 낮은 값 (예 : 0.1)에 도달하면 0으로 설정하십시오.

이제 끝났습니다. 그것은 꽤 잘 작동합니다, 나는 이것과 애플의 스크롤 사이에 눈에 띄는 차이점을 볼 수 없습니다.

+0

흥미 롭습니다. 방금 가장자리와 스크롤 표시기에서 "바운스 백"을 처리해야하고 Apple의 UIScrollView 동작을 거의 복제했습니다. – rpetrich

+0

사실이 방법은 꽤 탄력성이 부족하고 실제로 사용되지 않습니다. 여분을 드래그하면 가장자리를 지나칠 수 있습니다. – Eli