У меня есть приложение с несколькими панелями инструментов.Контроллер корневого представления контролирует панель инструментов, но другие представления имеют свой собственный класс контроллера представления.Я использую такой код для загрузки представлений:
-(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, но если я сделаю контроллер подпредставления корневым контроллером представления, он получитуведомления в порядке, но панель инструментов не появляется, потому что ее контроллер не является корневым контроллером.
Правильно ли я решаю проблему?Есть ли способ обойти это?