Использование UIScreen для управления VGA-дисплеем - не похоже UIWindow? - PullRequest
6 голосов
/ 18 апреля 2010

Привет там,

Я пытаюсь использовать UIScreen для управления отдельным экраном с помощью VGA-ключа на моем iPad.

Вот что у меня есть в viewDidLoad контроллера моего корневого представления:

//Code to detect if an external display is connected to the iPad.
 NSLog(@"Number of screens: %d", [[UIScreen screens]count]);

 //Now, if there's an external screen, we need to find its modes, itereate through them and find the highest one. Once we have that mode, break out, and set the UIWindow.

 if([[UIScreen screens]count] > 1) //if there are more than 1 screens connected to the device
 {
  CGSize max;
  UIScreenMode *maxScreenMode;
  for(int i = 0; i < [[[[UIScreen screens] objectAtIndex:1] availableModes]count]; i++)
  {
   UIScreenMode *current = [[[[UIScreen screens]objectAtIndex:1]availableModes]objectAtIndex:i];
   if(current.size.width > max.width);
   {
    max = current.size;
    maxScreenMode = current;
   }
  }
  //Now we have the highest mode. Turn the external display to use that mode.
  UIScreen *external = [[UIScreen screens] objectAtIndex:1];
  external.currentMode = maxScreenMode;
  //Boom! Now the external display is set to the proper mode. We need to now set the screen of a new UIWindow to the external screen
  external_disp = [externalDisplay alloc];
  external_disp.drawImage = drawViewController.drawImage;
  UIWindow *newwindow = [UIWindow alloc];
  [newwindow addSubview:external_disp.view];
  newwindow.screen = external;
 }

Ответы [ 6 ]

8 голосов
/ 19 апреля 2010

Вам нужно инициализировать ваше окно ...

 UIWindow *newwindow = [[UIWindow alloc] init];
2 голосов
/ 11 мая 2011

Просто запишите это здесь на случай, если кто-нибудь наткнется на этот вопрос. Я не мог ничего отобразить на втором экране, пока не понял, что мой делегат приложения должен сохранить UIWindow. У него нет естественного владельца, поэтому, если вы просто сделаете обычный автоматический выпуск, окно будет выпущено до того, как оно когда-либо отобразится.

Надеюсь, это поможет.

2 голосов
/ 10 июля 2010

Я думаю, что ваша проблема - внешний дисплей. Создайте viewcontroller вне вашего кода (возможно, просто добавьте новый файл ViewController и поместите материал в .xib) и попробуйте его, чтобы убедиться, что viewcontroller работает, прежде чем вызывать его на внешний дисплей. Вот ваш код с моими предлагаемыми изменениями - [mainViewController view] - это viewcontroller, который вы создали снаружи.

//Code to detect if an external display is connected to the iPad.
NSLog(@"Number of screens: %d", [[UIScreen screens]count]);

//Now, if there's an external screen, we need to find its modes, iterate
//through them and find the highest one. Once we have that mode, break out,
//and set the UIWindow.

if([[UIScreen screens]count] > 1) //if there are more than 1 screens connected
                                  //to the device
{
 CGSize max;
 UIScreenMode *maxScreenMode;
 for(int i = 0; i < [[[[UIScreen screens] objectAtIndex:1] availableModes]count]; i++)
 {
  UIScreenMode *current = [[[[UIScreen screens]objectAtIndex:1]availableModes]objectAtIndex:i];
  if(current.size.width > max.width);
  {
   max = current.size;
   maxScreenMode = current;
  }
 }
 //Now we have the highest mode. Turn the external display to use that mode.
 UIScreen *external = [[UIScreen screens] objectAtIndex:1];
 external.currentMode = maxScreenMode;
 //Boom! Now the external display is set to the proper mode. We need to now
 //set the screen of a new UIWindow to the external screen

 UIWindow *newwindow = [UIWindow alloc];

 [newwindow addSubview:[mainViewController view]];
 newwindow.screen = external;

 [newwindow makeKeyAndVisible];
 [newwindow setHidden:NO];
}
2 голосов
/ 18 апреля 2010

[newwindow makeKeyAndVisible]; * * 1002

1 голос
/ 23 июля 2010

Я загрузил пример .xcodeproj в github.

Я ссылался на эту страницу в основном.

Большое спасибо. :)

http://github.com/igaiga/iPadDisplayOutSample

0 голосов
/ 02 ноября 2010

Следует отметить, что код, предоставленный igaiga на этой странице и в ссылке на github, просто предназначен для "перемещения" (НЕ КЛОНА) представления, которое обычно будет на iPad (или другом устройстве).

Если вам нужно клонировать (он же Mirror) вид и обновить его содержимое, эта ссылка больше подходит: http://www.touchcentric.com/blog/archives/123

Надеюсь, это поможет прояснить варианты использования обоих наборов кода для пользователей, только начинающих интегрировать возможности видеовыхода в существующие приложения.

...