2011-12-23 4 views
2

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

Я следил за всеми примерами/документацией 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

+0

Ваш код выглядит нормально ... За исключением того, что вы сначала вызываете [super loadView] в loadView. – Felix

+0

Вы когда-нибудь это исправили? У меня такая же проблема. Но в iOS 8. –

+0

@DustinPfannenstiel Я столкнулся с тем же вопросом сегодня, соответствует ли это сообщение вашей проблеме? http://stackoverflow.com/questions/30040055/uiviewcontroller-displayed-sideways-on-airplay-screen-when-launched-from-landsca – francis

ответ

0

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

+0

Любые советы о том, как это сделать в iOS 8? –

Смежные вопросы