2013-07-02 2 views
0

나는 이것에 초보자이며 응용 프로그램을 리메이크하고 있습니다. UITapGestureRecognizer를 사용하려고합니다. 초기 프로젝트 파일에서는 작동하지만 새 프로젝트 파일에서는 작동하지 않습니다. 유일한 차이점은 이전 컨트롤러는 탐색 컨트롤러를 사용하지만 내 컨트롤러는 사용하지 않는다는 것입니다.모든 가치가 동일한 UITapGestureRecognizer

새로운 거리에서 : 자기 중심 거리 : 중심 위치는 화면을 어디에서 눌러도 640에 고정되어 있습니다.

아무도 도와 줄 수 있습니까? 왜 작동하지 않는지 나는 모른다.

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer { 
    CGPoint location = [recognizer locationInView:[recognizer.view superview]]; 
    CGPoint centre = CGPointMake(512,768/2); 

    NSInteger msg = [self distance:location to:centre]; 
    NSLog(@"location to centre: %d", msg); 

    if ([self distance:location to:centre] < 330) 
+0

'[recognizer.view superview]는 의심 스럽습니다. 어떤 견해입니까? 'recognizer.view'로 바꾸십시오. –

+0

고쳐주세요! 정말 고맙습니다! superview는 다른 버전의 탐색 컨트롤러와 관련이 있습니까? – AnotherNewbie

답변

0

나에게 의심스러운 부분은 [recognizer.view superview]이다.

제스처 인식기가 컨테이너 컨트롤러 (예 : 탐색 컨트롤러) 내부에 있지 않은 UIViewController에서 self.view에 추가 된 경우보기에 수퍼 뷰가 없습니다. 컨테이너 뷰 컨트롤러없이 superview 메시지를 self.view로 보내면 nil이 반환됩니다.

그래서 당신의 메시지가 화면을 도청했다 알려주는 유효 CGPoint은 또한 창에서 위치를 반환이

CGPoint location = [recognizer locationInView:nil]; 

이처럼 기본적으로 보였다.
이것은 작동하지 않았으므로 [self distance:location to:centre]에서 볼 때 상대 좌표에서만 작동하는 작업을 수행합니다. 아마도 회전과 관련이있을 것입니다. 왜냐하면 장치를 돌릴 때 창의 좌표가 회전하지 않기 때문입니다. 코드가 무엇인지 모르면 문제가 무엇인지 잘 모르겠지만 문제가되지는 않습니다.

[recognizer.view superview]recognizer.view으로 바꿉니다.

관련 문제