Я не уверен, что есть какие-то странные побочные эффекты с этой реализацией, но попробуйте что-то вроде этого и посмотрите, работает ли он для вас:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {
if (UIInterfaceOrientationIsPortrait(orientation)) {
[[NSBundle mainBundle] loadNibNamed:@"MenuView" owner:self options:nil];
if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
self.view.transform = CGAffineTransformMakeRotation(M_PI);
}
} else if (UIInterfaceOrientationIsLandscape(orientation)){
[[NSBundle mainBundle] loadNibNamed:@"MenuViewLandscape" owner:self options:nil];
if (orientation == UIInterfaceOrientationLandscapeLeft) {
self.view.transform = CGAffineTransformMakeRotation(M_PI + M_PI_2);
} else {
self.view.transform = CGAffineTransformMakeRotation(M_PI_2);
}
}
}
Это предполагает, что Владелец файла в вашем MenuViewи MenuViewLandscape XIBs оба установлены в MenuViewController, и что выходное представление установлено также в обеих XIBs.Все ваши розетки должны быть правильно подключены по очереди при использовании loadNibNamed
.
Если вы создаете для iOS 4, вы также можете заменить строки loadNibNamed
на эти:
UINib *nib = [UINib nibWithNibName:@"MenuView" bundle:nil];
UIView *portraitView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
self.view = portraitView;
и
UINib *nib = [UINib nibWithNibName:@"MenuViewLandscape" bundle:nil];
UIView *landscapeView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
self.view = landscapeView;
Они предполагают, что UIViewто, что вы хотите отобразить, следует сразу за прокси-объектами «Владелец файла» и «Первый ответчик» в XIB.
Тогда вам просто нужно убедиться, что представления повернуты правильно для ориентации интерфейса.Для всех видов, которые не имеют книжной ориентации по умолчанию, поверните их, установив свойство transform
вида и используя CGAffineTransformMakeRotation()
с соответствующими значениями, как показано в примере выше.
Одна только ротация может решить вашу проблему без дополнительной загрузки NIB.Однако загрузка целого нового экземпляра MenuViewController
и установка его представления в существующее представление MenuViewController
может привести к некоторому странному поведению с событиями жизненного цикла и вращения, так что вам может быть безопаснее попробовать приведенные выше примеры.Они также избавляют вас от необходимости создавать MenuViewController
экземпляров, когда вам нужен только вид из них.
Надеюсь, это поможет!
Джастин