У меня есть простое приложение, предназначенное только для iPad и iOS 5+. Приложение имеет только ландшафт. Теперь я хочу использовать зеркальное отражение AirPlay на iPad 2.iOS 5 Экран AirPlay не правильно рисуется в ландшафте
Я следил за всеми примерами/документацией Apple. Я могу найти и не смогу преодолеть эту проблему с рисунком. Вторичный дисплей не рисует правильную ориентацию.
Ниже представлен вывод, который я вижу из небольшого тестового приложения. Синяя коробка - это просто UIView, который должен занимать весь экран, но это не так. Кажется, он правильно рисуется в ландшафте, но вид поворачивается на 90 градусов. Обратите внимание, как синий проходит мимо края на нижней части телевизора:
Я думаю, что мне нужно каким-то образом заставить 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
Ваш код выглядит нормально ... За исключением того, что вы сначала вызываете [super loadView] в loadView. – Felix
Вы когда-нибудь это исправили? У меня такая же проблема. Но в iOS 8. –
@DustinPfannenstiel Я столкнулся с тем же вопросом сегодня, соответствует ли это сообщение вашей проблеме? http://stackoverflow.com/questions/30040055/uiviewcontroller-displayed-sideways-on-airplay-screen-when-launched-from-landsca – francis