Приложение для iOS, работающее на двух экранах (без зеркалирования)

Я создал приложение для iPad, которое содержит слайд-шоу, и когда пользователь нажимает на это слайд-шоу, он/она может ввести некоторую информацию.

Что я хотел бы сделать сейчас, так это отобразить содержимое слайд-шоу на телевизоре при подключении телевизора и iPad через AirPlay (или, если возможно, по кабелю, но это только отражает вещи)

Можно ли это сделать? Можем ли мы запустить слайд-шоу на телевизоре, а также на iPad, а затем, когда пользователь коснется слайд-шоу на iPad, отобразится экран ввода учетных данных, но на телевизоре все равно будет отображаться основное слайд-шоу, а не учетные данные?

Как это можно сделать в iOS? Можно ли вывести часть приложения на телевизор? Таким образом, не зеркальное отображение всего приложения.


person Fréderic Cox    schedule 01.11.2011    source источник
comment
На самом деле я экспериментирую с AirPlay на iPhone 4s. Мне удалось заставить его работать с моим Apple TV 2 только после установки параметра зеркала в элементе управления трансляцией, расположенном на панели задач. Я собираюсь просмотреть другие возможные ответы здесь, прежде чем публиковать аналогичный вопрос.   -  person Cliff    schedule 26.11.2011
comment
можешь отметить мой ответ как правильный? конечно, к настоящему времени с таким количеством голосов это считается правильным?   -  person Dev2rights    schedule 28.05.2013


Ответы (2)


Вы можете написать приложение для обработки 2 UIScreen с помощью Airplay и Apple TV, а затем установить отдельный корневой контроллер представления как для TV UIScreen, так и для iPad UIScreen. Затем отобразите изображение или слайд-шоу на контроллере просмотра телевизора и запустите его из событий контроллера просмотра вашего iPad!

ИСПРАВЛЕНО ПОСЛЕ КОММЕНТАРИЯ CLIFS:

Итак, во-первых, в вашем приложении делегируйте в didFinishLaunchingWithOptions или didFinishLaunching настройку уведомления для получения экрана, который действительно подключился.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(screenDidConnect:) name:UIScreenDidConnectNotification object:nil];

Затем вам нужно сохранить ссылку на ваше отдельное окно и нажимать на него контроллеры, как и на любое другое окно.

- (void) myScreenInit:(UIScreen *)connectedScreen:(UIViewController*)mynewViewController
{    
    //Intitialise TV Screen
   if(!windowTV)
    {
        CGRect frame = connectedScreen.bounds;
        windowTV = [[UIWindow alloc] initWithFrame:frame];
        windowTV.backgroundColor = [UIColor clearColor];
       [windowTV setScreen:connectedScreen];
        windowTV.hidden = NO;
    }

    UIViewController* release = windowTV.rootViewController;
    windowTV.rootViewController = mynewViewController;
    [release removeFromParentViewController];
    [release release];
}

- (void)setTvController:(UIViewController*)mynewViewController
{     
    UIViewController* release = windowTV.rootViewController;
    windowTV.rootViewController = mynewViewController;
    [release removeFromParentViewController];
    [release release];
}

- (void)screenDidConnect:(NSNotification *)notification {
     [self myScreenInit:[notification object]];
}
person Dev2rights    schedule 14.11.2011
comment
Этот ответ не содержит подробностей о том, как это делается. Там только упоминается, что это возможно с возбужденным восклицательным знаком на конце. - person Cliff; 26.11.2011
comment
Я удалил свой голос против. Здесь есть еще кое-что для ответа. Кто-то, кто совершенно не знаком с API (как я был несколько дней назад), ничего не увидит на дополнительном экране после того, что вы написали выше. - person Cliff; 05.12.2011
comment
Справедливости ради, если вы прыгаете в это, не изучив документацию по иерархии представлений, то вы пытались бежать, прежде чем сможете ходить. - person Dev2rights; 13.12.2011
comment
Это хороший ответ. Когда я создавал свое приложение, AirPlay был всего лишь несбыточной мечтой, но я использовал вариант этого, чтобы реагировать на второй экран (в моем случае через кабель к телевизору/монитору) и выводить на него правильный вид. - person Alan Taylor; 01.03.2013
comment
Уведомления screenDidConnect или screenDidDisconnect не будут срабатывать, если вы отключите параметр зеркального отображения. Это плохой ответ. - person Akhil PK; 27.03.2014

Похоже, в iOS 5.0 есть ошибка, которая делает это сложным. Вы должны включить зеркальное отображение на работающей панели задач (прокручивая полностью влево, прежде чем второй экран будет обнаружен через API. Я разместил подробности в своем вопросе здесь: Как использовать AirPlay в iOS 5+ для второго экрана

person Cliff    schedule 05.12.2011
comment
Я говорю, что стакан наполовину пуст, они говорят, что он наполовину полон. Особенностью явно будут некоторые вызовы API, подобные GameKit, для сканирования и обнаружения поблизости устройств, совместимых с AirPlay. - person Cliff; 25.10.2012