1

touchbar サポートを SDL アプリケーションに統合しようとしています。

私は 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

ありがとうございました。

4

1 に答える 1

1

チェーンにカスタム レスポンダーを追加するのも 1 つの方法ですが、最初に検討したほうがよい 2 つの簡単な方法があります。

  1. ウィンドウにカスタム クラスを提供できる場合は-makeTouchBar、 のサブクラスに実装しますNSWindow。このアプローチでは、touchBarプロパティを設定またはオーバーライドする必要はありません。✝</sup> 必要に応じてそのプロパティを-makeTouchBar設定するために遅延して呼び出されます。

  2. 独自のウィンドウ サブクラスを使用できない場合は、NSTouchBarオブジェクトを作成してウィンドウの既存のプロパティに割り当てることができtouchBarます。(基本実装は格納されたプロパティであるため、オーバーライドする必要はありません。)

✝</sup> デバイスに Touch Bar や実行中のシミュレーターがない場合に、余分な作業を避けることができるという点で、この遅延は便利です。

レスポンダーチェーンに挿入されたカスタムレスポンダーとしてこれを本当に実装したい場合は、次のようにすることができます:

touchBarResponder.nextResponder = window.nextResponder;
window.nextResponder = touchBarResponder;
于 2016-11-19T04:06:47.463 に答える