2012-05-24 5 views
-1

GameViewController라는 뷰가 있습니다. 나는 그것을 설정하지 않았지만 임베디드 EAGL 뷰가있는 UIKit 뷰인 것으로 보인다.하위 클래스의 UIGestureRecognizer 클래스에서 뷰의 선택기를 호출하는 방법

제 GameViewController에서 탭 및 스 와이프 용 제스처 인식기를 설정했습니다. 그들은 (게임 뷰 컨트롤러 내의 함수) touchesEnded를 호출 할 때 touchesBegan이 아니라면 tap을위한 selector로 설정 한 메소드를 제외하고는 훌륭하게 작동합니다.

touchesBegan 함수를 가져 오는 유일한 방법은 하위 클래스를 만드는 것입니다.

그래서 UITapGestureRecognizer를 서브 클래 싱하여 touchesBegan 함수를 만들었습니다. 거기에 NSLog가 터치 다운 될 때 호출됩니다. 그러나 UITapGestureRecognizer 하위 클래스에서 GameViewController의 함수를 호출 할 수는 없습니다. (클래스 메서드 + METHODIWANTTOCALL을 찾을 수 없습니다).

내가 "참조"를 앞뒤로 필요로한다는 것을 알았지 만 그게 어떨까요? 아니면 완전히 잘못된 접근입니까? 위임합니까? (내가 처음이야)이 UITapGesture 서브 클래스에서 호출 된 GameViewController 내에서 메소드를 갖는 가장 좋은 방법은 무엇입니까?

답변

1

GameViewController가 싱글 톤 클래스 (앱에서이 클래스의 인스턴스 하나) 인 것처럼 보입니다. 싱글 톤의 인스턴스를 반환하는 GameViewController 클래스 메서드를 가질 수 있습니다.

[GameViewController handleTouchBegin];

: 그럼 당신은 정기적으로 단지 방법 할 수 인식기에서

: 그것을 알고 내부 상태를 필요로하지 않는 경우 또는 GameViewController* myController = [GameViewController getInstance]; [myController handleTouchBegin];

, 당신은 클래스 메소드와 같은 handleTouchBegin를 정의 할 수 있습니다

+0

GameViewController는 확실히 싱글 톤입니다. 인스턴스를 반환하기 위해 코드를 작성하는 데 어려움을 겪고 있습니다. 모든 예제는 인스턴스를 할당하는 것 같습니다 ... 그리고 분명히 'GameViewController'가 이미 할당되어 있습니다. –

+0

실제로 말해야 할 것은 GameViewController 인스턴스가 하나 밖에 없다는 것입니다.하지만 본 디자인 패턴을 사용하여 싱글 톤으로 설정되지 않았습니다. –

+0

MyGameViewController라는 GameViewController 주위에 래퍼를 만들면됩니다. 또는 자신의 클래스를 싱글 톤을 검색 할 수있는 클래스로 사용하십시오. GameViewController를 초기화하고 저장할 때마다 "getGameViewController"라는 클래스 메쏘드를 생성하십시오. 그런 다음'[SomeClassThatOwnsController getGameViewController]를 호출하십시오 .' – John

관련 문제