2012-03-13 5 views
2

컨테이너 내에 많은 사용자 정의 UIView가 있는데, 사용자가 이동 한 후에 애니메이션을 적용합니다. 움직임을 추적하기 위해 현재 위치는 touchesBegan:이고, 위치는 touchesMoved:으로 업데이트됩니다. 내가 아주 최근 뷰를 이동 한 (그리고 여전히 원래 위치로 애니메이션을 할 수있다) 나는 다른이 touchesBegan: 선택이 호출되지 않습니다 볼 끌기 시작하면,하지만 touchesMoved: 특히 경우touchesBegan없이 touchesMoved가 호출되었습니다.

때때로, touchesEnded:이 될 것입니다 . 과 touchesEnded:은 처음에 touchesBegan:이 호출되지 않고 호출 될 수 있습니까?

답변

1

아마도 Apple docs을 다시 읽을 가치가 있습니다. touchesBegan인 경우이 보장되는지 확실하지 않습니다.

touchesBegan 기타 이벤트를 로깅하고있는 것으로 보입니다. 아마도 올바른 이벤트가 실행되고 있지만 로그 메시지가 "고장난"것으로 나타 났을 수 있습니까?

+0

나는 내가 그 touches를 읽었던 것을 기억하고있다라고 생각했다 Began는 불릴 것을 보증 받았다. 그러나 나는 내가 잘못 생각했다고 생각한다. 각 touch 이벤트에서 로깅 중이며 오류가 발생하면 touchesBegan을 로깅하지 않습니다. 더 나은 해결책을 찾지 못하면 touchesBegan이 호출 된 시점을 알려주는 플래그를 유지하고 해당 플래그가 설정되면 touchesMoved 및 touchesEnded 액션 만 수행합니다. – Ned

1

내 앱에서 비슷한 문제가 발견되었습니다. 다른보기의 모양을 벗어난보기에 애니메이션을 적용하면 처음보기를 빠르게 터치하고 스 와이프를 시작하면 touchesBegan 이벤트가 발생하지 않지만 첫 번째보기가 사라지면 touchesMoved를 시작합니다.

이 대답에 따르면 app starts ignores user interaction events when i call animateWithDuration:delay:options:animations:completion:에 따르면 애니메이션 작업 중에 사용자 상호 작용 이벤트가 무시되는 것을 볼 수 있는데 이는 우리가 보는 것과 일치한다고 생각합니다. UIViewAnimationOptionAllowUserInteraction 옵션 또는 userInteractionEnabled 속성을 사용해보십시오. 당신이 필요로하는대로 이벤트를 통과 할 수 있어야합니다.