2016-11-18 7 views
1

저는 터치 바 지원을 SDL 응용 프로그램과 통합하려고합니다.NSWindow 개체에서 NSTouchBar를 만드는 방법은 무엇입니까?

SDL에서 객관적인 C 코드를 작성하고 SDLView 코드에 직접 해킹하여 작동하는 터치 바를 얻었으나 지금은 SDL2 라이브러리를 사용하여 동일한 기능을 사용하고자합니다. SDL은 그것이 생성하는 NSWindow 객체를 노출시키고 makeTouchBar와 makeItemForIdentifier가 구현 된 응답 객체를 생성 할 수 있다고 생각하지만,이를 창에 "부착하는"방법을 모른다. 나는 그것이 "응답자 사슬"일 것이라고 생각하지만, 그것이 의미하는 바가 정확히 무엇인지 어떻게하는지 정확히 알지 못합니다.

나는 다음을 시도하고 창에서 setNextResponder의 몇 가지 다른 조합을 시도했지만 makeTouchBar를 호출하는 올바른 조합을 파악할 수없는 것처럼 보일 수는 있지만 작동하기 때문에 올바른 야구장에있다. 이 방법을 직접 뷰에 적용하면

@interface MyTouchbarResponder : NSResponder 
- (id)init; 

@property(strong, readonly) NSTouchBar *touchBar; 
- (NSTouchBar *)makeTouchBar; 
- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier; 


@end 




@implementation MyTouchbarResponder 
- (id)init 
{ 
    [super init]; 
} 

- (NSTouchBar *)makeTouchBar 
{ 
...stuff... 
} 

- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier 
{ 
...stuff... 
} 

@end 

감사합니다. 체인에 사용자 정의 응답을 추가

답변

1

그것을 할 수있는 하나의 방법이지만,이 간단한 방법은 먼저 고려할 수있다 :

  1. 당신이 당신의 창에 대한 사용자 정의 클래스를 제공 할 수있는 경우, 구현 서브 클래스가 NSWindow-makeTouchBar. 이 방법을 사용하면 touchBar 속성을 설정하거나 재정의 할 필요가 없습니다. -makeTouchBar은 지연된 경우 과 같이 필요에 따라 해당 속성을 채 웁니다.

  2. 자신의 창 하위 클래스를 사용할 수없는 경우 NSTouchBar 개체를 만들고이 개체를 창에있는 touchBar 속성에 할당하면됩니다. (기본 구현은 저장된 속성입니다, 그래서를 오버라이드 (override) 할 필요가 없습니다.)

이 게으름 유용, 장치가 터치 바이없는 경우는 점에서 당신은 여분의 일을 피할 수 있습니다 또는 시뮬레이터를 실행 중이다.

touchBarResponder.nextResponder = window.nextResponder; 
window.nextResponder = touchBarResponder; 
+0

감사합니다 : 당신이 정말로 리스폰 더 체인에 개재 된 사용자 정의 응답으로이를 구현하려는 경우

, 당신이 뭔가를 할 수 있습니다. 윈도우 또는 뷰 클래스를 제어 할 권한이 없습니다. https://github.com/spurious/SDL-mirror/blob/master/src/video/cocoa/SDL_cocoawindow.m#L56 내가받는 것은 NSWindow 객체에 대한 핸들입니다. – xaxxon