iPad では VGA アダプタを接続して外部のディスプレイやプロジェクタに出力することができます。ミラーリングなどの機能はなく、自分で UIWindow を作成して出力する UIView を指定して出力します。

流れとしては、
・外部ディスプレイの出力サイズを取得する
・UIWindow を作成する
・その UIWindow に 出力する UIView を設定する
・UIWindow を外部出力に指定する

また、Notification を設定しておくことにより外部ディスプレイが接続されたり、接続が解除されたりしたときには通知を受けることが可能です。

外部出力する処理

UIScreen の screens で外部ディスプレイがあるかチェックし、あれば最大の出力サイズを取得し UIView をそのサイズで作成して設定します。

NSArray *screens = [UIScreen screens];
if(screens.count>1) {
  UIScreen* screen = [screens objectAtIndex:1];
  UIScreenMode *maxScreenMode;
  CGSize maxSize;
  for( UIScreenMode *current in screen.availableModes ) {
    if(current.size.width > maxSize.width) {
      maxSize = current.size;
      maxScreenMode = current;
    }
  }
  screen.currentMode = maxScreenMode;
  window = [[UIWindow alloc]init];
  window.screen = screen;
  view = [[UIView alloc] initWithFrame:maxSize];
  [window addSubview:view];
  [window makeKeyAndVisible];
} else {
  // 外部ディスプレイが見つからない
}

Notification の設定

外部ディスプレイが接続された時、切断された時、出力モードが変更された時の設定です。

// 接続された時
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(screenDidConnectNotification:) name: UIScreenDidConnectNotification object: nil];
// 切断された時
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(screenDidDisconnectNotification:) name: UIScreenDidDisconnectNotification object: nil];
// 出力モードが変更された時
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(screenModeDidChangeNotification:) name: UIScreenModeDidChangeNotification object: nil];

関連する投稿