2010-04-17 2 views
6

HI there,Использование UIScreen для управления VGA-дисплеем - похоже, не показывает UIWindow?

Я пытаюсь использовать 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; 
} 
+1

Что это такое для iPad? Вы также можете выводить на внешний дисплей на iPhone? – Ali

ответ

8

Вы должны инициализировать окно ...

UIWindow *newwindow = [[UIWindow alloc] init]; 
+0

Большое спасибо за это!Так оно и было! Не могу поверить, что я забыл ... –

2

[newwindow makeKeyAndVisible];?

+1

Я добавил это право после последней строки, и все еще кажется, что он делает то же самое. Это интересно, потому что я могу сказать (используя мой монитор), когда приложение VGA было «заявлено» приложением, это то же самое, что и при запуске Keynote; дисплей не переключится в режим DVI или не перейдет в режим сна. Может возникнуть проблема с моим контроллером представления внешнего дисплея? Это довольно мягкий, просто файл .xib с UIImageView, ничего сложного. Спасибо за предложение! –

+0

Теперь у меня есть вид, показанный на выходе VGA. К сожалению, любое изменение параметра drawImage для внешнего дисплея кажется неработоспособным. Я добавил другие IBOutlets, которые работают, но не drawImage (это UIImageView). Есть идеи? –

+0

Спасибо Noah - это на самом деле было частью моей проблемы, но я тоже забыл инициализировать окно. Спасибо за ваш ответ! –

2

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

//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]; 
} 
0

Необходимо отметить, что код, предоставленный на этой странице и на ссылке GitHub по igaiga это просто означает «двигаться» (не клонировать) мнение, что, как правило, быть на IPad (или другое устройство).

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

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

2

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

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

+1

Работая над чем-то подобным, у меня тоже была эта проблема, спасибо! Я использую ARC и даже не думал, кто ее сохранит. – jblocksom