2012-05-13 8 views
0

motionBegan : withEvent : 메소드를 내 View Controller에 넣어 작동 여부를 확인했지만 호출되지 않았습니다. viewWillAppear에서보기 컨트롤러를 첫 번째 응답자로 설정하고 canBecomeFirstResponder에서 YES를 반환합니다.흔들기 제스처 이벤트를 앱 대리인에게 전달

이보기 컨트롤러는 분할보기의 마스터 창에 있으므로 장치를 흔들기 전에 첫 번째 응답자가 변경되었을 수 있습니다.

하지만 내 진짜 질문은 모든 모션 이벤트를 응용 프로그램 대리인의 처리기로 전달할 수 있습니까? motionBegan : withEvent : 모든 뷰 컨트롤러의 메서드 또는 모든 첫 번째 응답자의 대리자가 있어야합니까? 이와 같은 이벤트가 UIResponder에 코드를 삽입하지 않고 응답 체인을 흘러가는 방법이 있습니까? 그것은있을 것으로 보이지만, 나는 이것을 어떻게하는지에 대해 내 손가락을 두지 않았다.

답변

1

가장 쉬운 방법은 당신이 모든 이벤트는이 클래스

int retVal = UIApplicationMain(argc, argv, @"myApplication", @"myAppDelegate"); 
을 사용할 수 있습니다

을 통해 설정 제어를해야합니다 UIApplication에서 -sendEvent:를 오버라이드 (override)입니다

또 다른 해결책은 범주를 만들거나 확장이다 -viewWillAppear:more info

+0

UIApplication 클래스와 UIApplicationMain 함수가 어떻게 관련되어 있는지 보여 주셔서 감사합니다. 이것은 내가 익숙하지 않은 영역이며, 이것에 대해 아는 것이 매우 유용하게 보입니다.이 권리를 이해한다면 (그리고 오늘 밤에 시도 할 것입니다), 서브 클래 싱 된 UIApplication에서'sendEvent :', 즉, (shake 동작과 같이) 즉시 처리하고 싶고 정상적인 처리를해야하는 사람들을 위해 [super sendEvent : event]를 호출하고 싶습니다. – Jim

+0

하위 클래스 UIApplication은 완벽하게 작동했습니다. 관심있는 다른 사용자에게는 기기가 사용자의 주머니에있을 때에도 흔들림 이벤트가 발생할 수 있습니다. 몇 가지 추가 필터링이 필요합니다. – Jim

0

이 과정에서 내가 한 일은 motionBegan 메서드를 구현하는 UIWindow 범주를 만드는 것입니다. 해당 motionBegan 메서드에서 사용자 지정 NSNotification을 브로드 캐스트합니다. 그런 다음 모션 이벤트를 원하는 응용 프로그램의 모든 위치에서 모션 알림을위한 옵저버를 추가하기 만하면됩니다.

카테고리는 객체의 모든 인스턴스에 메소드를 추가하므로 시스템 작성 창에서도 motionBegan 메소드를 얻고 올바른 작업을 수행합니다. 아름답게 작동합니다.

+0

UIWindow가 firstResponder에 대한 대리자가 아닌 경우 어떻게 작동하는지 잘 모르겠습니다. motionBegan : firstResponder 인 UIRespopnder (또는 서브 클래 싱 된 UIResponder) 객체의 델리게이트에있는 메소드입니다. 항상 그런 것은 아닙니다 (일반적으로, 나는 베팅합니다.) 내가 틀렸어? – Jim

관련 문제