2013-03-16 5 views
2

나는 iOS에서 사용자 지정 본때를 보여주고있다. Activator에서 새 트리거를 추가 할 수있게하려고합니다. 특히 이것은 이론적으로 모든 장치 입력에 대해 작동 할 수 있지만 홈 버튼에 탭 릴리스 탭 및 홀드 동작을 정의하려고합니다.새로운 입력 제스처를 인식하기 위해 iOS에서 Activator를 확장하는 방법은 무엇입니까?

이제 MobileSubstrate에 익숙해 졌으므로 런타임시 기존 클래스에 대해 method swizzling (자세한 내용은 http://iphonedevwiki.net/index.php/MobileSubstrate 참조)과 다른 기능 및 이점을 제공합니다. 그러나 코드에 액세스 할 수 없기 때문에 Activator에 연결하는 방법을 모르겠습니다. ClassDump를 사용하여 Activator의 헤더를 내보내고 구분할 수 있지만 Activator는 매우 복잡한 응용 프로그램입니다. 왜 일주일을 보면서 일주일을 보느냐보다는 다른 누군가가 올바른 방향으로 나아갈 수있는 거친 '주입 지점'(더 나은 용어가 없음)을 알고 있기를 바랍니다.

시스템 레벨에서 내 행동을 듣기 만해도 Activator를 단락시킬 수 있습니다.이 활동을 통해 달성하려는 목표를 무너 뜨릴 수 있습니다. 이는 사용할 수있는 새로운 행동을 추가하는 것입니다 액티베이터 : 액티베이터 확장 프로그램.

누구나 정보를 얻거나 좋은 점프 포인트를 얻으려면 어떻게해야합니까? 나는 약간의 방향으로 코드의 헤더 클래스 전체를 찢을 필요가 없기를 바라고있다.

답변

0

LAEvent과 같은 것을 만들고 싶습니다. 는 여기에 몇 가지 정보가 시작 도움이 될 수 있습니다

  1. 구현 LAEventDataSource

    @protocol LAEventDataSource <NSObject> 
    
    @required 
    - (NSString *)localizedTitleForEventName:(NSString *)eventName; 
    - (NSString *)localizedGroupForEventName:(NSString *)eventName; 
    - (NSString *)localizedDescriptionForEventName:(NSString *)eventName; 
    
    @optional 
    - (BOOL)eventWithNameIsHidden:(NSString *)eventName; 
    - (BOOL)eventWithName:(NSString *)eventName isCompatibleWithMode:(NSString *)eventMode; 
    
    @end 
    
  2. 등록 이벤트 데이터 소스가

    @interface LAActivator : NSObject 
    - (void)registerEventDataSource:(id<LAEventDataSource>)dataSource forEventName:(NSString *)eventName; 
    @end 
    

    이제 이벤트가 LAActivator

    availableEventNames 재산에서 사용할 프로토콜
    @property (nonatomic, readonly) NSArray *availableEventNames; 
    
  3. 보내기 이벤트

    @interface LAEvent : NSObject<NSCoding> 
    + (id)eventWithName:(NSString *)name; 
    + (id)eventWithName:(NSString *)name mode:(NSString *)mode; 
    - (id)initWithName:(NSString *)name; 
    - (id)initWithName:(NSString *)name mode:(NSString *)mode; 
    @end 
    
    @interface LAActivator : NSObject 
    - (void)sendEventToListener:(LAEvent *)event; 
    @end