Layout Multiview Повернутое приложение для iPhone с панелью инструментов - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть приложение с несколькими панелями инструментов.Контроллер корневого представления контролирует панель инструментов, но другие представления имеют свой собственный класс контроллера представления.Я использую такой код для загрузки представлений:

-(IBAction)loadBand1Start:(id)sender{
    [self clearView];
    Band1Start *band1Controller = [[Band1Start alloc] initWithNibName:@"Band1Start" bundle:nil];
    self.band1Start = band1Controller;
    [band1Controller release];
    [self.view insertSubview:band1Start.view atIndex:0];
    if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) {
        band1Start.view.frame=CGRectMake(0, 0, 480.0, 260.0);
    } else {
        band1Start.view.frame=CGRectMake(0, 0, 320.0, 400.0);
    }
}

Оператор IF должен загружать его в правильной ориентации.Без этого, хотя он вращается нормально, он всегда загружается в книжной ориентации, даже если телефон работает в альбомной ориентации.

Работает функция автоматического изменения размера и автоповорота.Я использовал IB для создания моих перьев в портрете.Когда телефон поворачивается в горизонтальное положение, он поворачивается и изменяет размер, однако при использовании некоторых перьев повернутая раскладка выглядит неправильно.Существуют перекрытия и т. Д., Что является распространенной проблемой, и я знаю, что это можно исправить с помощью CGRectMake.

Однако, не имеет значения, куда я помещаю CGRectCode, он не выполняется.Я попытался поместить его в willRotateToInterfaceOrientation, willAnimateRotationToInterfaceOrientation и viewWillAppear, но повернутый макет не изменился.

Если я использую приведенный ниже код для переключения видов, повернутый макет - это то, что я хочу, но панель инструментов делаетне появляется:

-(IBAction)loadBand1Start:(id)sender{
    [self clearView];
    Band1Start *band1Controller = [[Band1Start alloc] initWithNibName:@"Band1Start" bundle:nil];
    [self presentModalViewController:band1Controller animated:NO];
    [band1Controller release];
}

Я думаю, это потому, что контроллер вида для панели инструментов должен быть корневым контроллером вида, чтобы панель инструментов появлялась, но только корневой контроллер вида получает уведомления об изменении ориентации.

Так что, если я оставлю свой контроллер панели инструментов в качестве контроллера корневого представления, контроллер подпредставления не получит уведомлений об ориентации, поэтому не выполнит мой код CGRectMake, но если я сделаю контроллер подпредставления корневым контроллером представления, он получитуведомления в порядке, но панель инструментов не появляется, потому что ее контроллер не является корневым контроллером.

Правильно ли я решаю проблему?Есть ли способ обойти это?

...