Подтвердить что ты не робот

IOS - выход External (hdmi) заполняет только половину экрана, за исключением случаев, когда просмотр кода вручную

Итак, как гласит название, у меня есть hdmi на iPad и наблюдатель, зарегистрированный для подключений к экрану, после подключения пользователь выбирает res и представление.

Однако, если я загружаю представление из ниба или даже из контроллера программного представления, ipad показывает пейзаж в портрете (да, обе ситуации установлены в альбомную).

т.е.

ExternalViewController *ex = [[ExternalViewController alloc] init];
[externalWindow setRootViewController:ex];

делает следующее:

Bad Если я создаю представление сам по себе программно. так:

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, инициализируя размер внешнего экрана. Спасибо

4b9b3361

Ответ 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];