Экран iOS 5 AirPlay не отображается правильно в альбомной ориентации - PullRequest
2 голосов
/ 24 декабря 2011

У меня есть простое приложение, предназначенное только для iPad и iOS 5+. Приложение только для ландшафта. Теперь я хочу воспользоваться зеркалированием AirPlay на iPad 2.

Я следовал всем примерам / документации Apple, которую могу найти, и не могу обойти эту проблему с рисованием. Дополнительный дисплей не отображается в правильной ориентации.

Ниже приведен вывод, который я вижу из небольшого тестового приложения. Синяя рамка - это просто UIView, который должен занимать весь экран, но это не так. Кажется, что он правильно рисует в ландшафте, но вид поворачивается на 90 градусов. Обратите внимание, как синий цвет выходит за границы нижней части телевизора: enter image description here

Я думаю, что мне нужно каким-то образом заставить ViewController внешнего окна правильно рисовать в альбомной ориентации, но я не знаю, как это сделать. Есть идеи?

Ниже приведены соответствующие коды штук:

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[NSNotificationCenter defaultCenter]
        addObserver:self
        selector:@selector(screenDidConnect:)
        name:UIScreenDidConnectNotification
        object:nil];

    [self initScreens];

    return YES;
}

- (void)screenDidConnect:(NSNotification *)note
{
    [self initScreens];
}

- (void)initScreens
{
    if ([[UIScreen screens] count] > 1)
    {
        UIScreen *screen = [[UIScreen screens] lastObject];

        if (!self.secondaryWindow)
        {
            self.secondaryWindow = [[UIWindow alloc] initWithFrame:screen.bounds];
            self.secondaryWindow.screen = screen;
            self.secondaryWindow.hidden = NO;
        }

        if (!self.secondaryViewController)
        {
            self.secondaryViewController = [[CCKSecondaryViewController alloc] init];
        }

        self.secondaryWindow.rootViewController = self.secondaryViewController;
    }
}

CCKSecondaryViewController.m: Это rootViewController внешнего окна

- (void)loadView
{
    UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
    view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    view.backgroundColor = [UIColor blueColor];

    self.view = view;

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
    label.text = @"Secondary Screen";
    [label sizeToFit];

    [self.view addSubview:label];
    label.center = self.view.center;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

Пример приложения можно найти здесь:

http://dl.dropbox.com/u/360556/AirplayTest.zip

1 Ответ

0 голосов
/ 05 января 2012

Отображается в портретном режиме на подключенном экране.Если ваш shouldAutorotateToInterfaceOrientation метод всегда возвращает NO, то вам нужно его разобраться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...