2011-04-28 4 views
8

두 개의보기가 서로 아래에 있습니다. 탑 뷰의 터치 센싱으로 아래 뷰를 회전시키고 있습니다. 스 와이프를하려고 할 때 터치 감퇴 취소 이벤트는 터치 종료 이벤트 전에 호출됩니다. 움직이는 손가락 터치가 시작되고 터치 된 경우 이동 된 이벤트가 호출 된 후 종료 된 이벤트가 마지막에 호출됩니다 (대부분). 그러나 때로는 천천히 움직이려고 시도하는 동안 취소 된 이벤트를 터치하는 것은 터치 이벤트가 중지되도록 호출됩니다. 그래서 나는 느린 속도로보기를 회전시킬 수 없었다. 무엇이 문제일까요? 어떻게 취소 된 이벤트를 피하기 위해?Touches cancelled 이벤트를 방지하는 방법은 무엇입니까?

참고 : core-plot lib를 사용하여보기에서 일부 그래프를 그립니다.

답변

15

UIGestureRecognizers을 사용하는 경우 제스처를 인식하면 다른보기로 자동으로 취소됩니다. 인식 자의 cancelsTouchesInView 속성을 사용하여이 동작을 끌 수 있습니다.

+0

감사합니다. –

5

UIGestureReconizer directlly를 사용하지 않는 경우 UITouch의 gestureRecognizers 속성을 알아 두십시오. 나는 같은 문제가이 코드를 나는 그것을 해결 :

if (event.type == UIEventTypeTouches) 
{ 
    NSSet* tmpTouches = [event touchesForView:m_PhotoView]; 
    if ([tmpTouches count] == 2) 
    { 
     UITouch *tmpTouch1 = [[tmpTouches allObjects] objectAtIndex:0]; 
     UITouch *tmpTouch2 = [[tmpTouches allObjects] objectAtIndex:1]; 
     if ((tmpTouch1 != nil)&&(tmpTouch2 != nil)) 
     { 
      UIGestureRecognizer * tmpG; 
      if ([tmpTouch1.gestureRecognizers count] > 0) 
      { 
       tmpG = [tmpTouch1.gestureRecognizers objectAtIndex:0]; 
       tmpG.cancelsTouchesInView = NO; 
      } 
      if ([tmpTouch2.gestureRecognizers count] > 0) 
      { 
       tmpG = [tmpTouch2.gestureRecognizers objectAtIndex:0]; 
       tmpG.cancelsTouchesInView = NO; 
      } 
      // Code ... 
     } 
    } 
} 
+0

제스처 인식기를 사용하지 않아서 필자가 필요로하는 모든 기능에 이상적이었으며 모든 취소 이벤트가 원활하지 못하게 막았습니다. Pocjoc에게 감사드립니다. – AndyDunn

+1

제스처를 사용하지 않지만 tmpTouches의 중요성을 2로 계산하고 색인 값을 하드 코딩하는 것을 이해하지 못합니다. 좀 더 설명해 주시겠습니까? – sole007

0

뿐만 아니라 UISwipeGestureRecognizer를 찾아보십시오. 이 문제가 나를 위해 문제를 일으키고 있으며 일단 설정하면 해결됩니다

[recognizer setCancelsTouchesInView:FALSE]; 
관련 문제