9

Airplayに関するデザイン/アーキテクチャの質問。AppDelegateで外部ディスプレイを設定しました。

UIScreen *externalScreen = UIScreen.screens.lastObject;
self.externalWindow = [[UIWindow alloc] initWithFrame:externalScreenFrame];
self.externalWindow.screen = externalScreen;
self.externalWindow.backgroundColor = [UIColor redColor];

正常に動作し、テレビは空の画面を赤で表示します。これで、多数のサブビューを備えたViewControllerができました。デバイス外部画面に、1つのビューが表示されるはずです。ViewController.mでこれを試してみると:

[_appDelegate.externalWindow addSubview:self.deviceAndTVView];

deviceAndTVViewは外部画面にのみ表示され、デバイスには表示されなくなります。私が必要とするのは、デバイス上にdeviceAndTVViewを配置し、タッチ/ユーザーインタラクションでそれ自体を更新し、それらの更新を外部画面にミラーリングすることです。

それを達成するための正しい道はどれですか?

読んでくれてありがとう!m

4

2 に答える 2

15

AirPlayミラーリングと呼ばれるテクノロジーはあまり名前が付けられていません。実際には2つのモードで動作します。1つはiOSデバイス全体がAirPlayデバイスにミラーリングされるモードで、もう1つはミラーリングするAirPlayデバイスが接続されると開発者が2つのUIWindow/UIScreenを操作できるモードです。

後者のモードを使用しています。これは「ミラーリング」と呼ばれることがよくありますが、実際には管理するウィンドウ/画面が完全に独立しているため、この操作モードを参照するためのより適切な用語が必要です。

上記で説明したことは、基本的にUIViewをデバイスウィンドウからAirPlayウィンドウに移動することであり、正常に機能しています。

UIViewの単一のインスタンスをこれらのウィンドウの両方に表示する技術的な方法はありません。UIView階層のいずれかに存在しますが、同時に両方に存在することはありません。つまり、両方の画面に同じものを表示したい場合は、同じUIViewの 2つのインスタンスを作成し、それぞれを2つのウィンドウに追加してから、変更に応じて両方を更新する必要があります。

これはあなたが期待していた非常に便利な「ミラーリング」ではないかもしれませんが、UIViewのアスペクト比がAirPlayデバイスとは異なる可能性があるため、おそらく良いことです。同じコンテンツを表示する2つの異なるビューを用意することで、AirPlayビューのサイズを調整して、デバイスの利用可能な解像度を最大限に活用できます。

于 2012-05-14T00:18:15.627 に答える
1

これを行う方法はいくつか考えられます。これにKVOを使用することを検討しましたか?ローカル ビューと外部ビューの両方で、コンテンツを駆動しているモデルまたはコントローラーを監視できます。

于 2012-04-16T08:34:07.907 に答える