これはトリッキーです。私はそれを行う良い方法を見つけられませんでした。より良い方法があると確信していますが、私にとってパフォーマンスは大きな問題ではなかったので、それに落ち着きました。私は完全な解決策を持っていません.あなたが求めた方法で問題を解決していません. より良い解決策を思いつくことができれば、それを更新しますが、今のところこれがすべてです。
私が行った方法は、実際には の「上」に透明な ViewController がglkViewController
あり、GLKViewController の上でやり取りしたいもの (tableViews、ボタン、ほとんどの UI など) がそれに追加されることです。 .
OverlayViewController
私がこれを行う方法は、どこからでも簡単にアクセスしたいので、ビューコントローラーと呼ばれるシングルトンオブジェクトを持っていることです. そして、これがGLKViewController::viewWillAppear
セレクターに追加されます。
そして、それは本当にすべての魔法です。したがって、IOKit タイプのオブジェクトをホストするオーバーレイ ビューがあります。このように追加します(サブクラスviewWillAppear:
から貼り付ける方が簡単です)GLKViewController
- (void) viewWillAppear: (BOOL) animated {
[[[OverlayViewController shared] view] setUserInteractionEnabled:NO];
[self.parentViewController.view addSubview: [[OverlayViewController shared] view]];
...
}
これは基本的に、表示される 2 つのビュー コントローラーが存在することを意味しますが、それらは互いに「独立」しています。
ただし、このアプローチには明らかな問題があります。たとえば、どのビューが現在ユーザーの操作を受け入れているかを追跡するという面倒な作業があります。これは処理されません。
そうは言っても、GLKitでレンダリング専用のスレッドをディスパッチすることが可能かどうかを調べています。