IOS - внешний (hdmi) вывод занимает только половину экрана, за исключением случаев, когда кодирование выполняется вручную - PullRequest
24 голосов
/ 11 ноября 2011

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

Однако, если я загружаю вид из кончика или даже из контроллера програматического вида, 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

Однако я хочу, чтобы контроллер вида загружался (и работал!) так,StackOverflow, я вас спрашиваю.кто-нибудь сталкивался с этим раньше?

РЕДАКТИРОВАТЬ: само собой разумеется, что обычные чувственные ответы не получают награду, я после исправления, а не обходной путь.С моим ограниченным умом все, что я могу думать, - это создать метод, который создает представление на основе его входных данных и добавляет, что в качестве подпредставления внешнего монитора ясно, что это решение для взлома, поэтому исправление приветствуется!Спасибо!

РЕДАКТИРОВАТЬ:

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

4 голосов
/ 01 декабря 2011

Просто верните 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...