IOS - выход External (hdmi) заполняет только половину экрана, за исключением случаев, когда просмотр кода вручную
Итак, как гласит название, у меня есть hdmi на iPad и наблюдатель, зарегистрированный для подключений к экрану, после подключения пользователь выбирает res и представление.
Однако, если я загружаю представление из ниба или даже из контроллера программного представления, ipad показывает пейзаж в портрете (да, обе ситуации установлены в альбомную).
т.е.
ExternalViewController *ex = [[ExternalViewController alloc] init];
[externalWindow setRootViewController:ex];
делает следующее:
Если я создаю представление сам по себе программно. так:
UIView *test = [[UIView alloc] initWithFrame:[externalScreen applicationFrame]];
[test setBackgroundColor:[UIColor whiteColor]];
UILabel *msgLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 40, 100, 30)];
msgLabel.text = @"External!";
[test addSubview:msgLabel];
Он бежит как какой-то волшебный сон:
![good]()
Однако я хочу, чтобы viewcontroller загружал (и работает!), поэтому, StackOverflow, я вас спрашиваю. кто-нибудь сталкивался с этим раньше?
EDIT: Само собой разумеется, что обычные чувствительные ответы не получают щедрости, я после исправления, а не обходной путь. С моим ограниченным мозгом, все, что я могу сделать, это создать метод, который создает представление на основе его входов и добавляет, что в качестве подсмотра внешнего монитора ясно, что это хакерское решение, так что исправление оценивается! Спасибо!
ИЗМЕНИТЬ:
-(id)initWithFrame:(CGRect)_rect
{
rect = _rect;
if (self = [super init])
{
externalView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"105.png"]];
externalView.alpha = 0.0;
[externalView setFrame:rect];
[externalView setBackgroundColor:[UIColor yellowColor]];
self.view = [[UIView alloc] initWithFrame:rect];
self.view.backgroundColor = [UIColor whiteColor];
return self;
}
}
- (void)loadView
{
self.view = [[UIView alloc] initWithFrame:rect];
self.view.backgroundColor = [UIColor blackColor];
[self.view addSubview:externalView];
}
В соответствии с запросом, я загружаю viewcontroller, инициализируя размер внешнего экрана. Спасибо
Ответы
Ответ 1
Просто верните NO
в - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
в подкласс UIViewController.
// ugly, don't use this in real code
if ([UIScreen screens].count == 1) return; // just one screen, eww.
// getting the secondary screen
UIScreen *screen = [[UIScreen screens] objectAtIndex:1];
__block UIScreenMode *highestWidthMode = NULL;
[screen.availableModes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
UIScreenMode *currentModeInLoop = obj;
if (!highestWidthMode || currentModeInLoop.size.width > highestWidthMode.size.width)
highestWidthMode = currentModeInLoop;
}];
// setting to the highest resolution available
screen.currentMode = highestWidthMode;
NSLog(@"screen.currentMode = %@", screen.currentMode);
screen.overscanCompensation = UIScreenOverscanCompensationScale;
// initializing screen
secondWindow = [[UIWindow alloc] initWithFrame:[screen bounds]];
[secondWindow setScreen:screen];
// other view is a UIViewController, just remember to return NO in - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation or the iOS will rotate the frame.
UIViewController *vc = [[OtherView alloc] initWithNibName:@"OtherView" bundle:nil];
secondWindow.rootViewController = vc;
[secondWindow makeKeyAndVisible];