2009-08-15 9 views
2

기본보기 (버튼으로 사용하는 일부 하위보기 포함)에서 상호 작용을 사용 중지했습니다.대기열에 닿기를 막을 수 있습니까?

네트워크 활동 (데이터로드 중)을 나타내는 보조보기가있는 동안이 기능을 사용하지 않도록 설정합니다. 작업이 완료되면 기본보기에서 상호 작용을 다시 활성화합니다.

이렇게하면 네트워크 작업이 진행되는 동안 사용자가 해당 단추를 누르지 않습니다.

어쨌든 모든 것이 잘 보입니다.하지만 사용자가 기본보기에서 버튼을 누르기 시작하면 다시 활성화하면 터치 이벤트 (지난 몇 초간)가 실제로 트리거됩니다. 버튼을 강조 표시 한 터치가 시작되지 않았지만 터치로 호출 된 기능이 종료되었습니다. 그것의 그것 같이 그것은 무능하게하고 "따라 잡기 위하여 경주"전체 시간을 대기열에 넣었다.

보기가 사용자 상호 작용이 사용 중지 된 동안 대기 이벤트가 발생하는 이유는 매우 이상합니다.

답변

4

이 여기에 코드를 보지 않고 응답의 확신하기 어렵다, 그러나 여기에서 아이디어 : 네트워크 활동이 일명 차단, 동기 경우

가, 다음은 사용자의 터치가 대기하고있는 경우 일 수 그들이 당신의 코드를 공격 할 기회를 갖기 전에. 그렇다면 네트워크 활동이 끝날 때까지 이러한 접촉은 응답 체인으로 보내지지 않으며 해당 컨트롤과의 상호 작용을 중지했다는 것을 "알 수있는"기회를 얻지 못합니다.

상황을 디버그하는 데 도움이되는 방법 중 하나는 다음과 같습니다. 디버그 NSLog 문을 네트워크 활동을 나타내는 최상위 계층 (보조 뷰라 칭하는 것)에 추가하십시오. 보조보기의 프레임이 해당 터치를 포함 할 정도로 충분히 큰지 확인하고 발생 즉시 터치를 기록하는지 확인하십시오. 그렇지 않다면 제 추측이 맞을 수도 있습니다. 그렇다면 유용한 정보를 얻을 수 있습니다. 큐를 대기시키지 않고 단순히이 레벨에서 터치를 포착 할 수 있습니다.

이 추측이 맞으면 네트워크 작동이 비동기적일 수 있다고 생각할 수있는 최소한의 수정 사항입니다.

동기화 호출이 완료된 후 NSTimer을 사용하여 네트워크 활동 표시기를 몇 초 동안 그대로 두어도됩니다. 이렇게하면 응답 체인이 들어오는 터치 대기열을 지우고 원하는 동작이면 무시할 수 있습니다.

+0

+1 뛰어난 통찰력. 나는 당신의 것이 나타 났을 때 나는 긴 대답을 쓰고 있었다. 그리고 나는 그것을 즉시 버렸다. 왜냐하면 내 것이 비교할 때 엄청나게 좁은 것처럼 보였기 때문이다. 할 수만 있다면 더 많은 투표를 할 수 있습니다. –

+0

감사합니다. Dave! 마이클에게 유용하기를 바랍니다. – Tyler

+0

고마워, 나는 그 문제가 어디에 있는지 정말로 모른다. 기본적으로 비활성화 된 배경보기 및 네트워크 활동을 나타내는 모달 창입니다. 나는 뒤를 먼저 무능하게한다. XML 데이터의 비동기로드입니다. 데이터가로드 되 자마자 모달 창을 제거하고 백그라운드에서 상호 작용을 다시 활성화합니다. 어쨌든, 나는 확실히 모든 접촉을 얻지 못하고 있으며, 비활성화 상호 작용이 대부분의 부분에서 효과가있는 것처럼 보입니다. 그러나 데이터를 완료하는 데 1 초 미만의 시간 동안 반복적으로 탭하면 코드가 실행되고 이로 인해 터치가 발생합니다. 또 다른 질문은 – Michael

관련 문제