2012-02-13 2 views
0

touchesBegan 함수가 있고 위치를 출력하는 UIViewController가 있습니다. 내가 화면의 중앙으로 빠르게 탭을 두 배로 경우iPad 앱 - touches 두 번 두드리기가 잘못되었습니다.

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"in"); 

    NSArray *touchesArray = [touches allObjects]; 
    for(int i=0; i<1; i++) 
    { 
     UITouch *touch = (UITouch *)[touchesArray objectAtIndex:i]; 
     CGPoint point = [touch locationInView:touch.view]; 
     NSLog(@"point = %f %f",point.x,point.y); 
    } 
} 

, 나는 다음과 같은 출력을 얻을처럼

왜 두 번째 탭은 (39,22)로 등록되고 있음을
2012-02-12 21:47:13.522 MoreMost[479:707] in 
2012-02-12 21:47:13.523 MoreMost[479:707] point = 698.000000 86.000000 
2012-02-12 21:47:13.617 MoreMost[479:707] in 
2012-02-12 21:47:13.619 MoreMost[479:707] point = 39.000000 22.000000 

... iPad의 왼쪽 상단 모서리. 그러나, 나는 가운데에서 두드리고 있었다.

그래서, 두 가지 방법으로이 문제를 해결하고 싶습니다 :

1) somehow, not let the user double tap (however it seems even when I double tap fast, the touchesBegan function is called on two separate occassions) 
2) figure out why that 2nd tap is being registered with the wrong coordinates. 
+0

1) 두 번 탭하면 touchesBegan : withEvent :가 두 번 호출됩니다. (그것이 작동하는 방법입니다) 2) 두 번 탭의 각 탭이 두 가지보기로 떨어지는 것 같아요, 내가 어떻게 모르는 지 묻지 마십시오. 하지만 가장 합리적인 해결책은 위치가 알려진보기로 색인을 생성하는 것입니다. 예를 들어 'touch.view'대신 'locationInView : self.view'를 사용하면 터치가 히트 테스트를 통과하는 모든보기가됩니다. – NJones

+0

네, 효과가있었습니다. 왜 내가 touch.view, 롤 넣어 모르겠어요. 감사! – StanLe

답변

0

그것은 CGPoint 포인트 = [터치 locationInView : self.view]되어야한다 ... 없습니다 "touch.view"